Понимание / удаление / изменение кода "stopExecutionOnTimeout.js", который вставлен с помощью codepen? - PullRequest
0 голосов
/ 16 марта 2019

Я скопировал и вставил некоторый код 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

...