动态创建IFRAME加载方法和内存释放
1.document.createElement("IFRAME")后不要设置src属性,应先注册IFRAME的onload事件,然后把IFRAME添加到容器中2.设置计数器变量,默认值为0,在onload方法中检查计数器是否为0,如果为0则设置src属性(会再次触发IFRAME onload事件),然后计数加13.在IFRAME onload事件中判断计数后检查IFRAME src是否为
·
1.document.createElement("IFRAME")后不要设置src属性,应先注册IFRAME的onload事件,然后把IFRAME添加到容器中
2.设置计数器变量,默认值为0,在onload方法中检查计数器是否为0,如果为0则设置src属性(会再次触发IFRAME onload事件),然后计数加1
3.在IFRAME onload事件中判断计数后检查IFRAME src是否为nul,如果是则释放IFRAME
4.在IFRAME onload事件最后正常处理的代码
5.要释放IFRAME时,只要把src设置为null即可自动释放
示例:
var $iframe = $(doc.createElement("IFRAME"));
$iframe.attr("frameborder", 0);
$iframe.attr("scrolling", undefined === scrolling ? "no" : scrolling);
$iframe.css("width", "100%");
$iframe.css("height", "100%");
var msie = /msie/.test(navigator.userAgent.toLowerCase()); /*jQuery1.9以上版本检测是否为IE浏览器*/
var iframeInfo = { $iframe: $iframe, msie: msie, count: 0 }; /*count为计数器,必须使用对象引用再第二次加载时数值才有效*/
$iframe.on("load", iframeInfo, function (e) {
if (0 == e.data.count) { /*检查是否为首次加载*/
e.data.$iframe.contents().empty();
e.data.$iframe.attr("src", "user.htm");
++e.data.count;
return;
}
if (null == e.data.$iframe.attr("src")) { /*检查是否为释放iframe*/
e.data.$iframe.contents().empty();
e.data.$iframe.removeAttr('src');
e.data.$iframe.remove();
if (e.data.msie)
CollectGarbage();
e.data.$popupdlg.wijdialog("close"); ///这一句可选,这里是关闭对话框
return;
}
/*IE会执行两次*/
if (e.data.msie && 1 == e.data.count) {
++e.data.count;
return;
}
/*最后才是正常处理的代码,根据实际需要编写代码*/
var $divContainer = $(e.data.$iframe[0].contentWindow.document.getElementById("divContainer"));
$divContainer.show();
});
更多推荐
已为社区贡献1条内容
所有评论(0)