2

问题是当脚本在页面上时它可以工作,通常是从网上获取的,但是当代码位于作为插件的一部分的用户脚本中时,它突然忘记了有Access-Control-Allow-Origin: *标题并停止响应跨域请求.

这是一些说明这一点的代码:

// ==UserScript==
// @include     *nasa.gov*
// ==/UserScript==

var xhr = new window.XMLHttpRequest();
xhr.onreadystatechange = function () {
  alert('state changed: ' + this.readyState + "\nstatus: " + this.status);
};
xhr.onload = function(){
  alert('document loaded');
};
xhr.open('GET','http://apod.nasa.gov');
xhr.send(null);

我选择了 apod 站点,因为它没有现代网站的黑白,因此无需过滤事件。

在这种状态下它可以正常工作,但是当我将此 url 指向我的服务器时,它接受来自每个站点的调用,它会忽略 allow-origin 标头...

好的,这是一个错误,还是我在这里做错了什么?也许请求对象上的一些选项可以“确保”它可以去那里?我不知道喜欢xhr.allowcrossdomainaccess = true还是什么?

4

1 回答 1

1

(你已经想通了——但只是为了给这个问题一个正确的答案..)

注入的脚本以(大部分)正常的安全权限在页面中运行 - 与页面脚本相同。因此,您通常无法从注入的脚本执行跨域请求。

另请参阅https://stackoverflow.com/a/9614760/163549了解 Opera 中的 CORS 实施状态。

于 2012-07-24T02:57:40.373 回答