问题是,当脚本在页面上时它可以工作,通常是从网上获取的,但是当代码位于用户脚本中时,作为插件的一部分,突然它忘记了 Access- Control-Allow-Origin: *
header 并停止响应跨域请求。
下面是一些说明这一点的代码:
// ==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 站点,因为它没有现代网站的 b&w,所以不需要过滤事件。
在这种状态下它工作正常,但是当我将此 url 指向我的服务器接受来自每个站点的调用时,它会忽略 allow-origin header ...
好的,这是一个错误,还是我在这里做错了什么?也许请求对象的某些选项可以“确保”它可以去那里?我不知道像 xhr.allowcrossdomainaccess = true
还是什么?
最佳答案
(你已经想通了 - 但只是为了给这个问题一个正确的答案..)
注入(inject)的脚本在页面中以(大部分)正常的安全权限运行——与页面脚本一样。因此,您通常无法通过注入(inject)的脚本执行跨域请求。
另见 https://stackoverflow.com/a/9614760/163549 Opera 中的 CORS 实现状态。
关于javascript - 无法在最新(稳定版 12 和 beta v. 1497)opera 的 userjs(注入(inject)脚本)中执行跨域 xmlhttprequest,这是一个错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11451922/