Замена/замена файла JavaScript в html с помощью Greasemonkey

Моя цель - заменить исходный файл JavaScript с веб-страницы на мой домашний файл, который у меня локально. Я нашел интересную script здесь, которую я перепробовал, чтобы соответствовать моей цели.

// ==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 HTML to load...
    console.log('Replace stage 1: target HTML');
    injectScript(document.documentElement.outerHTML); //Run function injectScript with the page HTML as oldPage in the function
}, 1111);

Но консольный журнал никогда не достигает стадии 3, предположительно, из-за какого-либо открытия ошибки (document.open()) файла или замены (.replace) script.

Вывод:

//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 (или другого расширения)?

Я создал еще один поток с другим (другим) вопросом в том же проекте, если вас интересуют некоторые из вовлеченных файлов.

Ответ 1

Оригинальный script был уже выполнен до injectScript, поэтому, даже если ваш tampermonkey работает так, как ожидалось, результат может быть не таким, как вам нужно. Как правило, для этого требуется прокси-сервер.

Если вы не хотите создавать прокси-сервер, попробуйте найти что-то вроде if(window.a)return; в исходном script, напишите window.a=true в вашем tampermoneky script, запустив его в document-start и вставьте свой собственный script