我想将“script.js”替换为“demo.js”。有人请帮助我
<head>
<script src="script.js" type="text/javascript" language="javaScript"></script>
</head>
答案 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提到的原始脚本执行(尽管这不是问题的一部分)