Javascript 删除或阻止select Java脚本的Greasemonkey脚本

Javascript 删除或阻止select Java脚本的Greasemonkey脚本,javascript,greasemonkey,Javascript,Greasemonkey,我试图创建一个脚本来删除页面上的另一个脚本,但未成功 页面加载了2个我不想执行的脚本: <div id="myindex"> <div class="wrap"> <div id="idone"></div> <div id="idtwo"></div> <script type="text/javascript"></script> <script type

我试图创建一个脚本来删除页面上的另一个脚本,但未成功

页面加载了2个我不想执行的脚本:

<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>

如何阻止这些脚本运行?

这在新的Greasemonkey@run at指令中非常有效

下面是一个用户脚本示例:

重要引语:

此用户脚本将在文档开头运行,如 脚本式的,它甚至在得到任何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. 
             */
    }
};

这与新的Greasemonkey@run-at指令配合使用非常好

下面是一个用户脚本示例:

重要引语:

此用户脚本将在文档开头运行,如 脚本式的,它甚至在得到任何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。很好的链接,不显示任何内容->始终将重要信息放入您的answer@sjngm修正了+1。现在对FF和Greasemonkey有效-在那里它成为一个很好的解决方案。不适用于Chrome,也可能不适用于Opera。很好的链接,不显示任何内容->始终将重要信息放入您的answer@sjngm修好了