Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
拦截并更改站点';s使用greasemonkey的javascript_Javascript_Greasemonkey - Fatal编程技术网

拦截并更改站点';s使用greasemonkey的javascript

拦截并更改站点';s使用greasemonkey的javascript,javascript,greasemonkey,Javascript,Greasemonkey,假设有一个站点在html脚本标记中包含一个外部.js文件,如下所示: <script src="somescript.js"> 根据我的消息来源,这是正确的方法,但它不起作用。有人能帮我解决这个问题吗?老问题,但我最近需要做这个。 下面是我用GreaseMonkey做的 添加beforescriptexecute侦听器,等待加载目标脚本,检查src标记以识别正确的脚本 然后停止加载该脚本,并使用GM_xmlhttpRequest自己获取脚本源代码 然后,您可以随意修改脚本并将其插入

假设有一个站点在html脚本标记中包含一个外部.js文件,如下所示:

<script src="somescript.js">

根据我的消息来源,这是正确的方法,但它不起作用。有人能帮我解决这个问题吗?

老问题,但我最近需要做这个。 下面是我用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);
            }
        });
    }
});

你不是这样用的。(例如,见)。。。此外,您不能对通过
加载的脚本内容进行即时编辑。您是否愿意写下如何执行刚才描述的操作?漂亮吗?酷,我真的解决了。。。我很快会把答案贴出来。@Joey-你有没有贴过你的答案或者找到什么好的笔记?用变异观察者就可以了。例如,是的,这是正确的方法。差点忘了我问过这个问题!我知道,我总是觉得有义务回答我遇到的像这样的老问题!这不是标准功能
// ==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);
            }
        });
    }
});