- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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/
我在 StackOverflow 和其他地方看到了很多与此类似的问题,但没有一个直接解决我的问题。我正在 THREE.js 中使用凸包生成器生成 n 边多面体。我想将方形纹理映射到每个多面体的每个面上
我是一名优秀的程序员,十分优秀!