gpt4 book ai didi

javascript - 如何为我页面的 Javascript 提供 Greasemonkey 的 GM_xmlhttpRequest 的有限接口(interface)?

转载 作者:行者123 更新时间:2023-11-28 03:00:51 37 4
gpt4 key购买 nike

我有一个 Greasemonkey 用户脚本,它通过插入 <script> 在非特权上下文中运行其大部分代码。像这样的标签:

function code {
...
}

var script = document.createElement("script");
script.type = "application/javascript";
script.innerHTML = "(" + code + ")();";
document.body.appendChild(script);

这可以避免使用 unsafeWindow 做危险的事情.

但是,我的代码需要从另一个不支持 JSONP 的域上的 API 获取信息。 GM_xmlhttpRequest可以访问其他域,但仅在特权 Greasemonkey 上下文中可用。

我想编写一个函数,它提供有限的接口(interface),并使用 GM_xmlhttpRequest 准确地进行我需要的 API 调用。 ,然后将该(理论上安全的)函数公开给正常的页面上下文。我的第一次尝试是这样的:

unsafeWindow.foo = function() {
console.log("Foo!");
console.log(GM_xmlhttpRequest.toString());
GM_xmlhttpRequest({
method: "GET",
url: "http://www.example.net/",
headers: {
"User-Agent": navigator.userAgent,
"Accept": "text/html"
},
onload: function(response) {
console.log(response);
unsafeWindow.console.log(response);
alert(response);
unsafeWindow.alert(response);
}
});
console.log("Bar!");
};

有趣的是,当我调用foo()时从页面上下文中,我看到“Foo!”,字符串化的 GM_xmlhttpRequest和“酒吧!”在控制台日志中。但是,我从未在控制台或警报中得到响应。如果我做GM_xmlhttpRequest在 GM 上下文中,我可以同时收到警报和日志消息。

问题是:我想做的事情可能吗?或者还有其他方法可以完成同样的事情吗?

最佳答案

啊哈!答案已发布到similar question .

Greasemonkey 是有意这样做的,并在 0.7.20080121.0 compatibility 上提供了一个简单的解决方法。页面:

unsafeWindow.foo = function() {
window.setTimeout(GM_xmlhttpRequest, 0, {
// ...
});
};

这有效。

关于javascript - 如何为我页面的 Javascript 提供 Greasemonkey 的 GM_xmlhttpRequest 的有限接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/977686/

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