Greasemonkey,覆盖网站功能

Mar*_*ars 7 javascript jquery greasemonkey function

我已经阅读了很多,现在已经尝试将这项工作完成约5个小时......所以现在就是这样

我想编写一个覆盖函数dummy(){$ .ajax(...)}的脚本; 在网站上.

这是我试图这样做的方式

unsafeWindow.dummy = function(data){differantFunction(); $.ajax(...);};

function differantFunction(){
...
}
Run Code Online (Sandbox Code Playgroud)

但是虚拟函数本来可以调用来在原始页面上做某事......现在什么都不做.

//更新

我尝试运行该功能,我试图通过adres栏覆盖以查看错误:(javascript:dummy("..");)

我收到一个错误,告诉我$是未定义但我在网站和用户脚本上有jquery ...我现在迷路了

w35*_*l3y 12

发生这种情况是因为脚本在GM范围内运行.
如果您不使用任何GM功能(如GM_setValueGM_xmlhttpRequest),我建议您执行以下操作:

var script = document.createElement('script'); 
script.type = "text/javascript"; 
script.innerHTML = (<><![CDATA[

// YOUR CODE GOES HERE

]]></>).toString();
document.getElementsByTagName('head')[0].appendChild(script);
Run Code Online (Sandbox Code Playgroud)

将代码编写为普通脚本,而不是GM脚本.
我的意思是,删除所有unsafeWindow引用和相关的东西.
这将使脚本在正确的范围内运行.

但是如果你使用GM函数,那么你需要unsafeWindow在正常范围内的每个变量之前添加(比如$)或者执行类似下面的操作并祈祷使它工作:

$ = unsafeWindow.$;
//...
Run Code Online (Sandbox Code Playgroud)

PS.: 不再支持带E4X的多行字符串.其他一些选项是:
1)将代码添加到函数中,然后使用 Function.prototype.toString
2)将代码创建为单独的文件,然后将其添加为资源
3)在每行的末尾添加反斜杠