【发布时间】:2016-05-29 11:11:06
【问题描述】:
我有一个在 Chrome 中运行的 Web 应用程序,但同源策略已禁用(即 --disable-web-security)。我使用window.open() 创建一个新窗口,该窗口加载一个有时会重定向的URI。如果没有发生重定向,我可以在onload 事件触发时使用document 属性读取窗口内托管的文档的内容。不幸的是,在发生重定向的情况下,onload 似乎永远不会触发,并且从window.open() 返回的窗口对象不再有用。
这是代码,让您了解发生了什么:
var win = window.open('http://somewhere');
win.onload = function() {
doStuffWith(win.document.body);
win.close();
};
有什么方法可以让我保持有效的window 句柄,即使在新窗口打开后立即发生重定向?
根据@CBroe 的建议,我扩展了我的代码,看看如果我稍等片刻,是否可以获取窗口的内容。在上面的代码之后,我附加了:
setTimeout(function() {
console.log(win.location);
doStuffWith(win.document.body);
}, 5000);
location 被报告为 swappedout://(嗯!?)并且文档的正文为空。
【问题讨论】:
-
您可以访问窗口重定向到的页面的代码吗?
-
不,就是这样。我完全无法控制加载到新窗口中的内容。
-
如果我错了,请纠正我,但同源策略不是由服务器而不是客户端确定的吗?
-
服务器决定策略;客户强制执行它。我告诉我的客户不要这样做。
-
@sg.cc:同源策略在客户端强制执行,仅基于协议、主机名和端口是否匹配。也许您在这里将它与 CORS 混淆了? (在这件事上,远程服务器有发言权。)
标签: javascript same-origin-policy