我有以下锚标记,其中包含动态生成的参数arg1,...,arg5
到 JavaScript 函数foo()
,它在网站端运行。整个页面中有几个这样的锚标记,它们具有独特的id
价值观和argN
values:
<a href="#" id="foo1234567890" onclick="javascript:foo(arg1,arg2,arg3,arg4,arg5);return false;" target="_self" title="foobarbaz"> blah </a>
我想以编程方式触发foo()
函数通过循环遍历该元素的所有命中,搜索参数,并将这些参数传递给 Greasemonkey 的unsafeWindow.function(args)
call.
这是我迄今为止编写的 Greasemonkey 脚本:
function removeAllProperties() {
var xpath = "//A[@title='foobarbaz']";
var actionNodes = document.evaluate(
xpath,
document,
null,
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
null
);
var total = actionNodes.snapshotLength;
for (var i=0; i < total; i++) {
var candidate = actionNodes.snapshotItem(i);
//alert(candidate.nodeName);
if (candidate.nodeName === "A") {
var onclick_value = candidate.getAttribute('onclick');
var needle = /javascript:foo\((.*)\);return false\;/;
onclick_value.match(needle);
//alert(onclick_value);
//alert(RegExp.$1);
var script_args = RegExp.$1;
if (confirm(script_args)) {
unsafeWindow.foo(script_args);
}
}
}
}
removeAllProperties();
当我安装此脚本并运行它时,我收到带有参数的警报arg1,...,arg5
。如果单击“确定”,我会在 OS X 版 Google Chrome 5.0.375.125 中收到以下错误:
Uncaught TypeError: Object [object DOMWindow] has no method 'foo'
有问题的网页肯定有foo()
— 如果我点击blah
那么onclick
事件触发器foo()
。我只是无法通过这个 Greasemonkey 脚本让它工作。
我正在使用吗unsafeWindow.function(args)
错误,或者 Google Chrome 不支持这种触发远程 JavaScript 函数的方法?
我应该有不同的方式使用这个函数,还是应该完全使用另一种方法?
谢谢你的建议。