gpt4 book ai didi

javascript - 如何使用 Greasemonkey 将 JavaScript 函数(与其他代码一起从远程文件加载)替换为我自己的实现?

转载 作者:行者123 更新时间:2023-12-02 16:21:33 25 4
gpt4 key购买 nike

有一个页面,例如。 http://somesite.com 运行位于路径中的一些 javascript 代码,例如http://somesite.com/code.js

在该文件中(以及其他代码)有一个函数 (badFunction(x,y))。

我想更改其中一个局部变量的值,以便使其与另一个(局部)变量相等(在另一个函数中使用,也位于那个远程 javascript 文件)。

所以,基于这两个答案12 (即 this userscript ),我尝试了以下简单的用户脚本,以便用我自己的实现替换整个 badFunction ,但它不起作用(即我的 badFunction 没有注入(inject)到已加载 code.js - 我已通过 Firefox 的调试器对其进行了检查)。

我试图用用户脚本完成的任务是,在加载 code.js 时,在达到 badFunction 定义时,注入(inject)我的函数实现,然后让其余的code.js继续正常加载。

我的用户脚本出了什么问题?或者我的方法完全错误?

我不想给出上述远程 javascript 文件的实际 URL,因为它是 NSFW。

// ==UserScript==
// @name @document-start Example
// @version 1
// @namespace
// @include http://somesite.com/*
// @run-at document-start
// ==/UserScript==

var changed = 1; // script need to be edited with

window.addEventListener('beforescriptexecute', function(e) {

///for external script:
src = e.target.src;
if (src.search(/code\.js/) == "badFunction") {
changed--;
e.preventDefault();
e.stopPropagation();
append(badFunction);
};

///when done, remove the listener:
if(changed == 0) window.removeEventListener(e.type, arguments.callee, true);

}, true);


////// append with new block function:
function append(s) {
document.head.appendChild(document.createElement('script'))
.innerHTML = s.toString().replace(/^function.*{|}$/g, '');
}

function badFunction(x, y)
{
// my code
};

最佳答案

我没有您网站的源代码,因此我不知道 badFunction 是如何声明和调用的。但是请记住,如果在闭包内调用该函数,则需要将代码注入(inject)该闭包内的某个位置:

(function someClosure() {
function hello() {
// code
}
// hello is available
})();
// hello is not available

link他们展示了如何修改现有源代码

window.addEventListener('beforescriptexecute', function(e) {

///for external script:
src = e.target.src;
if (src.search(/bad\.js/) != -1) {
changed++;
e.preventDefault();
e.stopPropagation();
append(NewScript1);
};
});

所以基本上你需要搜索你的函数代码并替换它。请记住,您可以使用 [\s\S]* link 在正则表达式中搜索换行符

关于javascript - 如何使用 Greasemonkey 将 JavaScript 函数(与其他代码一起从远程文件加载)替换为我自己的实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29065911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com