【问题标题】:Greasemonkey script that removes or blocks select JavaScripts [duplicate]删除或阻止选择 JavaScript 的 Greasemonkey 脚本 [重复]
【发布时间】:2020-11-22 00:24:36
【问题描述】:

我尝试创建一个删除页面上另一个脚本的脚本,但没有成功。

该页面在<body> 中加载了两个我不想执行的脚本:

<div id="myindex">
  <div class="wrap">
    <div id="idone"></div>
    <div id="idtwo"></div>
    <script type="text/javascript"></script>
    <script type="text/javascript"></script>
    <script type="text/javascript"></script> //To Remove
    <script type="text/javascript"></script> //To Remove
  </div>
</div>

如何仅阻止这些脚本运行?

【问题讨论】:

标签: javascript greasemonkey


【解决方案1】:

这与新的 Greasemonkey @run-at 指令完美配合!

这是一个示例用户脚本: http://userscripts.org/scripts/show/125936

重要引述:

此用户脚本将在文档开头运行,至于 Scriptish,它甚至在获得任何 HTTP 响应之前运行(即 非常适合重定向)。

它展示了如何从网站中删除恶意 JS。 这是完整的脚本示例:

// ==UserScript==
// @name           editscript
// @version        0.0.1
// @namespace      example@example.com
// @include        http://*
// @run-at         document-start
// ==/UserScript==

var changed = 0; // script need to be edited with

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

    ///for external script:
    src = e.target.src;
    if (src.search(/bad\.js/) != -1) {
                changed++;
        e.preventDefault();
        e.stopPropagation();
        append(NewScript1);
    };

    ///for inline script:
        if(e.target===document.getElementsByTagName("script")[0]){
            changed++;
            e.stopPropagation();
            e.preventDefault();
            //todo
        }
        //tips: you could also run a regex search for the e.target.innerHTML
        //if the position of the inline script is not fixed.


    ///when done, remove the listener:
    if(changed == 2) window.removeEventListener(e.type, arguments.callee, true);

}, true);



////// append with new block function:
function append(s) {     
      document.head.appendChild(document.createElement('script'))
             .innerHTML = s.toString().replace(/^function.*{|}$/g, '');
}

////////////////////////////////////////////////
function NewScript1(){
    /* insert new block here, like:  */
    function load_good_stuff(){
            /* we still got it!! 
             * only without the evil thing. 
             */
    }
};

【讨论】:

  • +1。现在适用于 FF 和 Greasemonkey - 它成为一个很好的解决方案。不适用于 Chrome,也可能不适用于 Opera。
  • 很棒的链接,什么都不显示 -> 总是把重要信息放在你的答案中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-04
相关资源
最近更新 更多