我花了一个月的时间在这个问题上研究互联网,但还没有找到答案。我的代码执行以下操作(所有Javascript)。
假设我在mydomain.com上有一个test.html
头部的第一件事我设置了document.domain ='mydomain.com';
然后,动态创建iframe,将src设置为“subdomain.mydomain.com/test2.html”
将iframe附加到DOM
subdomain.mydomain.com/test2.html:头部第一件事:document.domain ='mydomain.com';
test2.html有on_dom_ready事件尝试通过window.parent与父进行通信
适用于所有浏览器。甚至在IE6中!唯一的问题是:当我在IE中刷新页面时,我得到访问被拒绝错误。
我能摆脱这个错误的唯一方法是在调用window.parent之前等待12秒。甚至没有5秒的帮助,我真的要等12秒。这对我没用。
任何人都有这方面的经验吗?
答案 0 :(得分:2)
这是因为父帧中的onload事件尚未触发,因此DOM未完全构建。这是一个kludge,它将以一定间隔扫描div,直到它存在,而不会爆炸:
var minmax_SCANDELAY= 500;
var minmax_scanner;
function minmax_scan() {
if (!window.parent.document.getElementById('content')) return;
window.clearInterval(minmax_scanner);
//replace following function call with your own.
doYourMagicHere();
}
minmax_scan();
minmax_scanner= window.setInterval(minmax_scan, minmax_SCANDELAY);
答案 1 :(得分:0)
Furtive的答案对我帮助很大!由于onload事件确实是问题,他100%正确。我已经深入研究了我的代码,我发现,在创建子iframe之前,我懒得用以下技术加载一些脚本:
lazy_load: function(url,on_finish_function)
{
var head = document.getElementsByTagName("head")[0];
var script = document.createElement("script");
script.src = url;
var done = false;
var This = this;
// Attach handlers for all browsers
script.onload = script.onreadystatechange = function()
{
if ( !done && (!this.readyState || this.readyState == "loaded" || this.readyState == "complete"))
{
done = true;
on_finish_function.call(This,null);
head.removeChild( script );
}
};
head.appendChild(script);
},
上述功能修改了文档的HEAD部分。 子iframe在这个lazy_load函数中以on_finish生成。
我的猜测是,IE浏览器真的害怕这个并花了12秒时间从文件修改这样的冲击中恢复过来:)我该怎么办?为什么IE需要很长时间才能从lazy_load dom操作中恢复?