我有一个系统负责将作业分配给在不同机器上运行的一组浏览器。每个浏览器都会重新加载一个页面,等待作业进来。
每个作业要做的一件事是向本地机器上运行的本地服务器发出跨域 JSONP 请求,以便从系统中获取一些信息。这适用于我尝试过的所有浏览器,除了 Opera。
这是我用来发出请求的 jQuery 代码:
$.ajax({
url: "http://10.20.30.40:8000/...",
dataType: "jsonp",
data: someData
success: function(data) { ... }
});
10.20.30.40
主机是本地IP地址,用浏览器标识机器上运行的本地服务器。blah.internal.example.com
发出此请求的页面是从我们网络内的所有机器可见的域名加载的。
从 Opera(我使用的是 12.02)发出的第一个此类请求成功。但是,以相同方式发出的后续请求从未真正发出过。它们不会显示在检查器的网络选项卡中。在控制台中,会显示一条消息,内容为Linked script not loaded
。
我相信这条消息(以及缺少请求)是由 Opera 的跨网络安全触发的,在这篇博文中有描述。在 Stackexchange 上,这个答案提出了一种解决方法,但它需要用户交互。对于我的用例,浏览器由脚本启动、停止和运行,因此用户交互不是一个选项。
有没有办法完全禁用 Opera 中的这种跨网络安全性,或者禁用从特定“受信任”主机加载的页面?我需要在首选项中进行更改,或者opera:config
在会话中保持粘性。(所有这些计算机都在内部网络上的内部控制页面上运行,所以我不担心跨网络攻击。)