Javascript Greasemonkey、Chrome和unsafeWindow.foo()
我有以下锚定标记,它包含动态生成的参数Javascript Greasemonkey、Chrome和unsafeWindow.foo(),javascript,google-chrome,greasemonkey,google-chrome-extension,Javascript,Google Chrome,Greasemonkey,Google Chrome Extension,我有以下锚定标记,它包含动态生成的参数arg1,…,arg5,指向在网站端运行的JavaScript函数foo()。在所讨论的页面中有几个锚定标记,具有唯一的id值和argN值: <a href="#" id="foo1234567890" onclick="javascript:foo(arg1,arg2,arg3,arg4,arg5);return false;" target="_self" title="foobarbaz"> blah </a> 当我安装并运行
arg1,…,arg5
,指向在网站端运行的JavaScript函数foo()
。在所讨论的页面中有几个锚定标记,具有唯一的id
值和argN
值:
<a href="#" id="foo1234567890" onclick="javascript:foo(arg1,arg2,arg3,arg4,arg5);return false;" target="_self" title="foobarbaz"> blah </a>
当我安装并运行此脚本时,会收到带有参数arg1,…,arg5
的警报。如果单击“确定”,则在Google Chrome 5.0.375.125 for OS X中会出现以下错误:
Uncaught TypeError: Object [object DOMWindow] has no method 'foo'
有问题的网页肯定有foo()
——如果我点击blah
,那么onclick
事件就会触发foo()
。我就是无法通过这个油腻的剧本来实现它
我是否错误地使用了unsafeWindow.function(args)
,或者Google Chrome不支持这种触发远程JavaScript函数的方法
是否有其他方法可以使用此函数,或者完全使用其他方法
感谢您的建议。在Chrome中,您不允许从userscript上下文访问内容页定义的变量/函数(请参阅) 您可以在循环中调用
candidate.onclick()
,而不是调用unsafeWindow.foo
如果这不是您想要的,那么您必须使用以下方法将函数调用注入DOM
var s = document.createElement("script");
s.innerHTML = "foo("+ script_args + ")";
document.body.appendChild(s);
或者将JSURI分配给位置
:
location.assign("javascript:foo(" + script_args +");void 0");
location.assign("javascript:foo(" + script_args +");void 0");