我有一个页面,其中 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)上使用的Web应用程序框架不兼容,因为它包含一个执行类似这样的脚本:
var src = (window.location.protocol == 'https:') ? something : other;
显然,在IE6 * 中,当您设置文档域时,location
对象变为只写,因此尝试读取window.location.protocol
会抛出“拒绝访问”
所以,我的问题是:如何在允许我的脚本读取location
对象的内容的同时允许跨域Javascript函数调用?
window.location.protocol
之前我无法读取document.domain
属性,然后在条件赋值中使用该值;这样做需要我重建Web框架库 - 而不是我想做的事情。* 也可能在IE的其他版本中;没有检查过。
答案 0 :(得分:1)
你能用jQuery吗?有一个很好的插件,允许你通过IE 6-8中的iframe执行window.postMessage:http://benalman.com/code/test/js-jquery-postmessage/
您可以从iframe打开弹出窗口,并使用postMessage在iframe和parent之间传递对象。
答案 1 :(得分:0)
我看不懂了 window.location.protocol属性 在设置document.domain之前 然后在条件中使用该值 分配;这样做需要我 重建Web框架库 - 不是我想做的事。
你不能在设置document.domain之前读取window.location.protocol,并在它变为只写时设置window.location.protocol吗?这还需要重建框架吗?这是一个黑客,但IE也是如此。