使用window.open
打开的页面是否可以允许自己通过跨源开启者进行检查? (这是用于内部应用程序,因此安全性不是一个重要问题。)如果是这样,如何?我已经尝试替换了我能找到的所有CORS和Same-Origin策略,并且仍然在子窗口的所有属性上获得Access Denied
。
特别是我正在尝试使用Internet Explorer 11
接头
这些是我到目前为止尝试过的所有标题
Access-Control-Allow-Origin: http://web1.corp.local
Access-Control-Allow-Credentials: true
Access-Control-Expose-Headers: Cache-Control,Content-Language,Content-Type,Expires,Last-Modified,Pragma
Access-Control-Expose-Methods: GET,POST,OPTION,PUT,DELETE,HEAD
X-Content-Security-Policy: default-src *;script-src *
Content-Security-Policy: default-src *;script-src *
X-XSS-Protection: 0
X-Permitted-Cross-Domain-Policies: all
我想做的事情......
我希望web1.corp.local
在web2.corp.local
的页面上执行一些JavaScript。我控制两个领域;我只是某种方式让web2
告诉浏览器web1
可以在web2
上阅读和执行内容。
http://web1.corp.local
上的请求
我试图从打开的窗口调用打开的窗口上的javascript函数。
document.domain = "corp.local";
var web2 = window.open('http://web2.corp.local');
web2.document; //Throw "Access Denied"
web2.MyApp; // undefined
http://web2.corp.local
上的Javascript
document.domain = "corp.local";
var myapp = window.MyApp = {
doWork: function() {
alert('Hello World!');
}
};
注意:我有一个使用iframe代理和window.postMessage
的解决方案,但web2
上托管的应用无法在iframe中正常运行。
更新:问题是这两个页面没有使用document.domain
而我在打开的窗口中错过了异常。
答案 0 :(得分:1)
问题是document.domain。第二个站点与第一个站点不在同一个域中。一旦我更改了web1的FQDN并使用了document.domain = corp.local
,问题就解决了。
我错过了document.domain
上的一个javascript文件引发的异常。
答案 1 :(得分:0)
显然,如果它是跨域的,并且在窗口之间(不是帧),它确实在IE中被打破。
看一下这个问题:Is cross-origin postMessage broken in IE10?
特别是brunolau在底部的答案看起来很有希望,可能正是你所需要的。在IE11中有希望,但他们也提到了一个更新它的更新。说实话,这很奇怪,我无法看到一个安全理由,使其无法使用已经为框架制定的约束和考虑因素。
另一方面,我知道它没有回答你的问题,但你可能想要通过服务器实现通信,这将消除对浏览器的影响(但如果你可能不那么关心你)只想支持IE 11。