假设有一个网站在html脚本标记中包含一个外部.js文件,如下所示:
<script src="somescript.js">
我希望greasemonkey拦截每个这样的脚本,并在它们执行之前改变它们中的一些值。例如,我想在其中将所有出现的值“400”更改为“300”,然后继续加载页面,就像脚本使用这些值而不是原始值一样。目前我在greasemonkey中使用以下代码:
function replaceTargetJavascript (scriptNode) {
var scriptSrc = scriptNode.textContent;
scriptSrc = scriptSrc.replace (
/'400'/,
"'300'"
);
addJS_Node (scriptSrc);
}
document.addEventListener("beforescriptexecute", function(e) {
checkForBadJavascripts ( [
[false, /'400'/, replaceTargetJavascript]
] );
}, true);
根据我的消息来源,这是正确的方法,但它不起作用。有人可以帮我解决这个问题吗?
答案 0 :(得分:3)
老问题,但我最近需要这样做。 以下是我使用GreaseMonkey的方法。
添加beforescriptexecute侦听器,等待加载目标脚本,检查src标记以识别正确的脚本。
然后你停止加载该脚本并使用GM_xmlhttpRequest自己获取脚本源。
然后您可以随意修改脚本并将其重新插入DOM。
// ==UserScript==
// @name Test
// @namespace Test
// @description TEST
// @include http://the.website.com/*
// @version 1
// @grant GM_xmlhttpRequest
// @run-at document-start
// ==/UserScript==
function addScript(text) {
text = text.replace(/replaceThis();/g, "");
var newScript = document.createElement('script');
newScript.type = "text/javascript";
newScript.textContent = text;
var head = document.getElementsByTagName('head')[0];
head.appendChild(newScript);
}
window.addEventListener('beforescriptexecute', function(e) {
src = e.target.src;
if (src.search(/script_to_modify\.js/) != -1) {
e.preventDefault();
e.stopPropagation();
GM_xmlhttpRequest({
method: "GET",
url: e.target.src,
onload: function(response) {
addScript(response.responseText);
}
});
}
});