我的目标是使用我在本地拥有的自制文件从网页替换原始JavaScript文件。我找到了一个有趣的剧本here,我根据自己的目标重新调整了这个剧本。
// ==UserScript==
// @name JS_tamper
// @namespace namespace
// @include http://192.168.1.1/*
// @version 1
// @grant none
// @run-at document-start
// ==/UserScript==
var newJSFile = "http://localhost:8080/tamper.js"; //The JS file to load in replacment of old JS file
var oldJSFile = "http://192.168.1.1/menuBcm.js"; //The old JS file as it is named in inspect element (make sure its spelled EXACTLY the same)
var pattern = new RegExp(oldJSFile, "i"); //Create the RegExp pattern with the /i switch to make it case-insensitive
function injectScript(originalPage) { //Function injectScript replaces the file
console.log('Replace stage 2: Replace text matching', oldJSFile, 'with', newJSFile);
var moddedPage = originalPage.replace(pattern, newJSFile); //Modify the HTML code that we got, replacing the old JS file with the new one
document.open();
console.log('Replace stage 3: Write new HTML to page...');
document.write(moddedPage); //Write to the page the new HTML code
document.close();
}
setTimeout(function() { //Wait a bit for the page's HTML to load...
console.log('Replace stage 1: target HTML');
injectScript(document.documentElement.outerHTML); //Run function injectScript with the page's HTML as oldPage in the function
}, 1111);
但是控制台日志永远不会到达第3阶段,可能是由于某些错误打开(document.open()
)文件或替换(.replace
)脚本。
输出:
//Replace stage 1: target HTML JS_tamper.user.js:29:5
//Replace stage 2: Replace text matching "http://192.168.1.1/menuBcm.js" with "http://localhost:8080/tamper.js"
有谁知道为什么我遇到这个问题或者使用Greasemonkey(或其他扩展程序)解决此问题的其他方法?
如果您对某些相关文件感兴趣,我已在同一项目中创建了另一个thread和另一个(不同)问题。
答案 0 :(得分:1)
原始脚本已在injectScript
之前执行,因此即使您的tampermonkey按预期工作,结果也可能与您的需求不同。通常,您需要一个代理服务器来实现此目的。
如果您不想构建代理服务器,请尝试在原始脚本中找到类似if(window.a)return;
的内容,在您的tampermoneky脚本中编写window.a=true
,在{{3}处运行它}和document-start