Я скопировал и вставил некоторый код codepen для локальной работы, так как углубляюсь в веб-разработку и не могу понять, что делает конкретный скрипт (возможно, из-за моей необходимости освежить в JavaScript).
Это похоже на:
<script src="https://static.codepen.io/assets/common/stopExecutionOnTimeout-..longstring...js>
Мне удалось избавиться от всех ресурсов javascript и внешних ресурсов, на которые ссылается кодовая ссылка, и заменить их локальными активами, за исключением последнего.
Поиск в Google показывает, что по крайней мере еще один человек был озадачен этим сценарием.Вот ссылка на вопрос на форуме
В этом файле содержится javascript:
"use strict";"object"!=typeof window.CP&&(window.CP={}),window.CP.PenTimer={programNoLongerBeingMonitored:!1,timeOfFirstCallToShouldStopLoop:0,_loopExits:{},_loopTimers:{},START_MONITORING_AFTER:2e3,STOP_ALL_MONITORING_TIMEOUT:5e3,MAX_TIME_IN_LOOP_WO_EXIT:2200,exitedLoop:function(o){this._loopExits[o]=!0},shouldStopLoop:function(o){if(this.programKilledSoStopMonitoring)return!0;if(this.programNoLongerBeingMonitored)return!1;if(this._loopExits[o])return!1;var t=this._getTime();if(0===this.timeOfFirstCallToShouldStopLoop)return this.timeOfFirstCallToShouldStopLoop=t,!1;var i=t-this.timeOfFirstCallToShouldStopLoop;if(i<this.START_MONITORING_AFTER)return!1;if(i>this.STOP_ALL_MONITORING_TIMEOUT)return this.programNoLongerBeingMonitored=!0,!1;try{this._checkOnInfiniteLoop(o,t)}catch(e){return this._sendErrorMessageToEditor(),this.programKilledSoStopMonitoring=!0,!0}return!1},_sendErrorMessageToEditor:function(){try{if(this._shouldPostMessage()){var o={action:"infinite-loop",line:this._findAroundLineNumber()};parent.postMessage(o,"*")}else this._throwAnErrorToStopPen()}catch(t){this._throwAnErrorToStopPen()}},_shouldPostMessage:function(){return document.location.href.match(/boomerang/)},_throwAnErrorToStopPen:function(){throw"We found an infinite loop in your Pen. We've stopped the Pen from running. Please correct it or contact support@codepen.io."},_findAroundLineNumber:function(){var o=new Error,t=0;if(o.stack){var i=o.stack.match(/boomerang\S+:(\d+):\d+/);i&&(t=i[1])}return t},_checkOnInfiniteLoop:function(o,t){if(!this._loopTimers[o])return this._loopTimers[o]=t,!1;if(t-this._loopTimers[o]>this.MAX_TIME_IN_LOOP_WO_EXIT)throw"Infinite Loop found on loop: "+o},_getTime:function(){return+new Date}},window.CP.shouldStopExecution=function(o){var t=window.CP.PenTimer.shouldStopLoop(o);return!0===t&&console.warn("[CodePen]: An infinite loop (or a loop taking too long) was detected, so we stopped its execution. Sorry!"),t},window.CP.exitedLoop=function(o){window.CP.PenTimer.exitedLoop(o)};
Комментирование сценария в моем html-коде нарушает работу приложения.
Учитывая, что я запускаю его не в codepen, а локально, и в остальной части кода нет других ссылок на codepen (насколько я могу судить) ..
КакМогу ли я реализовать то, что stopExecutionOnTimeout
делает без всего такого кодепа, как window.CP.PenTimer
и т. д.?
Моя гипотеза
В начале программы есть некоторые прослушиватели событий:
document.documentElement.addEventListener("mousedown", function(){mouse_IsDown = true })
document.documentElement.addEventListener("mouseup", function(){mouse_IsDown = false})
(мое предположение - stopExecutionOnTimeout
код имеет какое-то отношение к обработке этих слушателей событий?)
TIA