gus*_*afc 5 javascript cross-domain internet-explorer-6
我有一个页面,其中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();
};
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为网页位于不同的域上.我可以设置document.domain属性来克服这个问题:
document.domain = "example.com";
Run Code Online (Sandbox Code Playgroud)
不幸的是,这与我在foo.html端(Apache Wicket)上使用的Web应用程序框架不兼容,因为它包含一个执行如下操作的脚本:
var src = (window.location.protocol == 'https:') ? something : other;
Run Code Online (Sandbox Code Playgroud)
显然,在IE6 *中,当您设置文档域时,该location对象变为只写,因此尝试读取window.location.protocol会抛出"拒绝访问".
所以,我的问题是:如何在允许我的脚本读取location对象内容的同时允许跨域Javascript函数调用?
window.location.protocol在设置之前无法读取属性document.domain,然后在条件赋值中使用该值; 这样做需要我重建Web框架库 - 而不是我想做的事情.*也可能在其他版本的IE中; 没有检查.
你能使用 jQuery 吗?有一个不错的插件,允许您在 IE 6-8 中通过 iframe 执行 window.postMessage:http://benalman.com/code/test/js-jquery-postmessage/
您可以从 iframe 打开弹出窗口,并使用 postMessage 在 iframe 和父级之间传递对象。
| 归档时间: |
|
| 查看次数: |
3391 次 |
| 最近记录: |