gpt4 book ai didi

javascript - Greasemonkey、Chrome 和 unsafeWindow.foo()

转载 作者:数据小太阳 更新时间:2023-10-29 05:53:28 25 4
gpt4 key购买 nike

我有以下 anchor 标记,其中包含动态生成的参数 arg1,...,arg5 到在网络上运行的 JavaScript 函数 foo()站点端。整个相关页面中有几个这样的 anchor 标记,具有唯一的 id 值和 argN 值:

<a href="#" id="foo1234567890" onclick="javascript:foo(arg1,arg2,arg3,arg4,arg5);return false;" target="_self" title="foobarbaz"> blah </a>

我想通过循环遍历该元素的所有命中、搜索参数并将这些参数传递给 Greasemonkey 的 unsafeWindow.function(args) 来以编程方式触发 foo() 函数 调用。

这是我目前编写的 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 函数的方法?

我应该以不同的方式使用此功能,还是应该完全使用另一种方法?

感谢您的建议。

最佳答案

在 Chrome 中,您不能从用户脚本上下文访问内容页面定义的变量/函数(参见 here )。

您可以在循环中调用 candidate.onclick() 而不是调用 unsafeWindow.foo

如果这不是你想要的,你要么必须使用类似的东西将函数调用注入(inject) DOM

var s = document.createElement("script");
s.innerHTML = "foo("+ script_args + ")";
document.body.appendChild(s);

或将 JS-uri 分配给 location:

location.assign("javascript:foo(" + script_args +");void 0");

关于javascript - Greasemonkey、Chrome 和 unsafeWindow.foo(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3400985/

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