Как остановить или изменить выполнение JavaScript на стороне клиента
Введение
В определенных сценариях , вам может потребоваться остановить или изменить выполнение определенных функций JavaScript в клиентской среде. Это может произойти по разным причинам, например, удаление нежелательных функций или корректировка поведения динамических элементов.
Остановка выполнения JavaScript
Для современных браузеров, таких как Firefox, событие beforescriptexecute может использоваться для перехвата и предотвращения выполнения JavaScript до того, как оно произойдет. Это позволяет вам ориентироваться на определенные теги или элементы
Чтобы реализовать этот метод, вы можете использовать функцию JavaScript, подобную следующей:
function checkForBadJavascripts(controlArray) { for (var J = controlArray.length - 1; J >= 0; --J) { var bSearchSrcAttr = controlArray[J][0]; var identifyingRegex = controlArray[J][1]; if (bSearchSrcAttr) { if (identifyingRegex.test(zEvent.target.src)) { stopBadJavascript(J); return false; } } else { if (identifyingRegex.test(zEvent.target.textContent)) { stopBadJavascript(J); return false; } } } }
Параметр controlArray позволяет определять шаблоны и соответствующие действия для сопоставления сценариев. Например, у вас может быть правило, останавливающее выполнение скрипта, если его исходный URL-адрес соответствует определенному шаблону:
checkForBadJavascripts([ [true, /evilExternalJS/i, null] ]);
Изменение поведения функции JavaScript
Если вам нужно изменить поведение определенной функции JavaScript, вы можете использовать методы динамического JavaScript для внедрения или переопределения функции. code.
Один из способов сделать это — использовать функцию overrideFunction из [Greasemonkey](https://github.com/greasemonkey/greasemonkey):
GM_overrideFunction(window.init, function() { // Override the existing init function and modify its behavior as needed });
В качестве альтернативы вы можете использовать функцию addJS_Node для вставки нового узла JavaScript, который выполняет ваш собственный код:
addJS_Node('alert("Hooray, you are a millionaire!")');
Совместимость браузера
Обратите внимание, что Событие beforescriptexecute поддерживается в Firefox, но в настоящее время оно не поддерживается в других браузерах, таких как Chrome. Для браузеров, отличных от Firefox, вам может потребоваться использовать полное расширение браузера для достижения желаемой функциональности.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3