3

我有一个系统负责将作业分配给在不同机器上运行的一组浏览器。每个浏览器都会重新加载一个页面,等待作业进来。

每个作业要做的一件事是向本地机器上运行的本地服务器发出跨域 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在会话中保持粘性。(所有这些计算机都在内部网络上的内部控制页面上运行,所以我不担心跨网络攻击。)

4

2 回答 2

2

如果您可以在 Opera 12+(以及所有其他浏览器,甚至 IE8)中使用 CORS,为什么还要使用 JSONP?它就像魅力一样。

只是不要忘记将所需Access-Control-Allow-*的标头添加到本地服务器。

Opera 开发网络上的更多信息: http ://dev.opera.com/articles/view/dom-access-control-using-cross-origin-resource-sharing/

于 2012-09-19T06:15:11.687 回答
0

尝试在opera:config#Cross%20Network 中完全禁用安全功能(似乎SO不会让我链接到那个..)

自然,如果您禁用了安全功能,则以后应该谨慎浏览.. ;-)

于 2012-09-20T07:37:31.283 回答