Greasemonkey脚本在特定注释之间删除HTML?

时间:2014-05-01 17:49:42

标签: javascript html greasemonkey

为了阻止我在加载页面时不想执行的JavaScript,我希望有一个Greasemonkey脚本删除两个HTML注释标记之间的所有内容。例如:

<!-- sub script -->
 Lines containing script elements to be removed
<!-- end sub script -->

我之前尝试使用建议给我的示例脚本删除脚本元素,但它没有按预期工作。那个剧本是这样的:

var script = document.querySelectorAll('script[src*="example.com"]');
for (var i = 0, len = script.length; i < len; i++) {
   script[i].parentNode.removeChild(scriptscript[i]);
}

简而言之,它并没有像我希望的那样删除脚本元素。我知道注释元素在页面之间是一致的,如果我可以使用它们作为标记来开始和结束搜索并简单地删除它们之间的所有内容,我相信它可以解决问题。

任何指导都将不胜感激。说我对JavaScript的新手是轻描淡写的,但我是一个快速学习者。

1 个答案:

答案 0 :(得分:1)

您只需删除包含该脚本的<script>即可删除JavaScript脚本。

这是因为一旦浏览器解析<script>,脚本就会运行,并且无法撤消该脚本。

但在某些浏览器上,您可以使用beforescriptexecute事件:

在运行之前阻止脚本
window.addEventListener('beforescriptexecute', function(e) {
    if (~e.target.src.indexOf('example.com')) {
        e.preventDefault();
    }
}, true);

请注意,您的GM脚本必须在要阻止的脚本之前运行,以确保使用

@run-at document-start