覆盖或阻止在Chrome / tampermonkey中加载外部.js文件

时间:2017-11-07 15:41:16

标签: javascript jquery 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文件。

1 个答案:

答案 0 :(得分:1)

在这种情况下,输入是一个变量,因为您在初始恶意脚本之后重新加载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);
}

在删除焦点之前,将在加载后等待半秒钟,之后您可以应用新的事件侦听器。