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");