如何使用Greasemonkey代码替换Head脚本

时间:2016-04-13 17:53:26

标签: javascript greasemonkey

我想将“script.js”替换为“demo.js”。有人请帮助我

<head>

    <script src="script.js" type="text/javascript" language="javaScript"></script>     

</head>

2 个答案:

答案 0 :(得分:5)

@run-at document-start提早运行您的脚本。添加事件侦听器beforescriptexecute并检查脚本源。当您检测到所需的脚本时,请调用该事件的preventDefault方法并替换DOM中的脚本标记。

// ==UserScript==
// @name        demo-scriptreplace
// @include     http://example.com/*
// @version     1
// @run-at      document-start
// ==/UserScript==

window.addEventListener('beforescriptexecute',
  function(event)
  {
    var originalScript = event.target;

    // debug output of full qualified script url
    console.log('script detected:', originalScript.src);

    // script ends with 'originalscript.js' ?
    // you can test as well: '<full qualified url>' === originalScript.src
    if(/\/originalscript\.js$/.test(originalScript.src)) 
    { 
      var replacementScript = document.createElement('script');
      replacementScript.src = 'replacementscript.js';

      originalScript.parentNode.replaceChild(replacementScript, originalScript);

      // prevent execution of the original script
      event.preventDefault();
    }
  }
);

答案 1 :(得分:0)

问题实际上并不是真正的描述性问题,但Greasemonkey实际上使用的是javascript。 所以,让我们假设你有&#34; head&#34;您的页面中的元素,并且您希望将其作为&#34; head&#34;中的单个元素。元件。

在Javascript中,您可以通过以下方式实现此目的:

var e = '<script src="script.js" type="text/javascript" language="javaScript"></script>';
document.head.innerHTML = e;

为了追加它你可以在第二个命令中添加等号前面的加号:

var e = '<script src="script.js" type="text/javascript" language="javaScript"></script>';
document.head.innerHTML += e;

修改 最后,如果您有单个script元素指向此类源javascript文件,您还可以使用它来识别元素并直接替换属性值:

document.querySelectorAll('script[src="script.js"]')[0].setAttribute('src','demo.js');

修改 需要指出的是,这回答了如何替换的问题。您仍然可能需要阻止Quasimodo提到的原始脚本执行(尽管这不是问题的一部分)