在 Chrome/tampermonkey 中覆盖或阻止加载外部 .js 文件
Overriding or preventing an external .js file from loading in Chrome/tampermonkey
我有一个包含以下脚本的页面:
<script type="text/javascript" src="domainstuff/evil.js"></script>
它有以下内容:
var input = ":input[type=text]";
jQuery(function(input)
{
jQuery(input).bind('focusout', function(e)
{
//...etc
}
}
它覆盖了我的 js:
document.addEventListener("focusout", function (e)
{
//etc
}
我试过 tampermonkey
jQuery(input).unbind("focusout");
还有
jQuery(input).off("focusout");
但我认为我无法针对 evil.js 的功能。
我又找不到 SO 问题了,但我看到有人建议使用
// @run-at document-start
和
// @run-at document-end
但两者都不会阻止 evil.js 文件加载。
老实说,我已经能够使用 uBlock Origin 阻止脚本,我的脚本终于可以运行了,但我只想知道是否可以覆盖外部 .js 中的函数(事件?)文件。
在这种情况下,输入是一个变量,假设您在初始恶意脚本之后加载 JavaScript:
jQuery(input).off("focusout");
将不起作用,但是:
jQuery(':input[type=text').off("focusout");
应该可以。
现在您必须确保在加载文档和执行 JavaScript 之后应用此方法,因此:
$(document).ready(function() {
jQuery(':input[type=text').off("focusout");
}
如果这也不起作用,在应用初始 eventListener 之前仍会调用 off()
,因此:
$(document).ready(function() {
setTimeout(function() {
jQuery(':input[type=text').off("focusout");
}, 500);
}
加载后将等待半秒,然后再移除 focusout,之后您可以应用新的事件侦听器。
我有一个包含以下脚本的页面:
<script type="text/javascript" src="domainstuff/evil.js"></script>
它有以下内容:
var input = ":input[type=text]";
jQuery(function(input)
{
jQuery(input).bind('focusout', function(e)
{
//...etc
}
}
它覆盖了我的 js:
document.addEventListener("focusout", function (e)
{
//etc
}
我试过 tampermonkey
jQuery(input).unbind("focusout");
还有
jQuery(input).off("focusout");
但我认为我无法针对 evil.js 的功能。
我又找不到 SO 问题了,但我看到有人建议使用
// @run-at document-start
和
// @run-at document-end
但两者都不会阻止 evil.js 文件加载。
老实说,我已经能够使用 uBlock Origin 阻止脚本,我的脚本终于可以运行了,但我只想知道是否可以覆盖外部 .js 中的函数(事件?)文件。
在这种情况下,输入是一个变量,假设您在初始恶意脚本之后加载 JavaScript:
jQuery(input).off("focusout");
将不起作用,但是:
jQuery(':input[type=text').off("focusout");
应该可以。
现在您必须确保在加载文档和执行 JavaScript 之后应用此方法,因此:
$(document).ready(function() {
jQuery(':input[type=text').off("focusout");
}
如果这也不起作用,在应用初始 eventListener 之前仍会调用 off()
,因此:
$(document).ready(function() {
setTimeout(function() {
jQuery(':input[type=text').off("focusout");
}, 500);
}
加载后将等待半秒,然后再移除 focusout,之后您可以应用新的事件侦听器。