【发布时间】:2010-12-02 16:43:47
【问题描述】:
我有一个页面,www.example.com/index.html 上的脚本打开 home.example.com/foo.html一个弹出窗口。当用户关闭弹出窗口时,我想通过在其上调用 Javascript 函数来通知打开器页面(它对 DOM 做了一些事情)。我像这样使用unbeforeunload:
// In index.html on www.example.com:
window.fn = function () { /* Perform stuff after foo.html has closed */ }
// In foo.html on home.example.com:
window.onbeforeunload = function () {
if (window.opener && window.opener.fn)
window.opener.fn();
};
这不起作用,因为网页位于不同的域中。我可以设置document.domain 属性来克服这个问题:
document.domain = "example.com";
不幸的是,这与我在 foo.html 端(Apache Wicket)使用的网络应用程序框架不能很好地配合,因为它包含一个执行以下操作的脚本:
var src = (window.location.protocol == 'https:') ? something : other;
显然,在 IE6* 中,当您设置文档域时,location 对象变为只写,因此尝试读取 window.location.protocol 会引发“访问被拒绝”。
所以,我的问题是:如何在允许跨域 Javascript 函数调用的同时仍然允许我的脚本读取 location 对象的内容?
- 我无法通过服务器。 (我要调用的函数所执行的工作实际上并不是这样。)
- 在设置
document.domain之前我无法读取window.location.protocol属性,然后在条件赋值中使用该值;这样做需要我重新构建 Web 框架库 - 这不是我想做的事情。
* 也可能在其他版本的 IE 中;没查过。
【问题讨论】:
标签: javascript internet-explorer-6 cross-domain