greasemonkey:阻止嵌入式JS运行

Mal*_*ala 5 javascript greasemonkey

一个页面在html中有以下内容:

<script type="text/javascript">
  // some code
</script>
Run Code Online (Sandbox Code Playgroud)

我的greasemonkey脚本需要阻止该脚本运行.我怎样才能做到这一点?


更新:我理解在一般情况下这是不可能的.但是,在我的具体情况下,我可能有一个漏洞?

<script type="text/javascript">
  if (!window.devicePixelRatio) {
    // some code that I -don't- want to be run, regardless of the browser
  }
</script>
Run Code Online (Sandbox Code Playgroud)

window.devicePixelRatio在嵌入式脚本运行之前,我有什么方法可以定义吗?

小智 13

现在可以@run-at document-start和Firefox 一起使用beforescriptexecute.仅在FF24中测试过.

// ==UserScript==
...
// @run-at         document-start
// ==/UserScript==

//a search string to uniquely identify the script
//for example, an anti-adblock script
var re = /adblock/i;

window.addEventListener('beforescriptexecute', function(e) {

    if(re.test(e.target.text)){

        e.stopPropagation();
        e.preventDefault();
    }

}, true);
Run Code Online (Sandbox Code Playgroud)

beforescriptexecute在2016年被拒绝使用HTML 5,Chrome不太可能实现它.

它不会为<script>其他脚本插入的节点运行.


Aar*_*run 2

用户脚本在页面加载后运行,因此您无法这样做。

除非,代码使用“onload”事件。

用户脚本在 DOM 完全加载之后、onload 发生之前执行。这意味着您的脚本可以立即开始,无需等待加载。