-
动态创建iframe导致内存不足20
我现在想做一个效果,就是主页里面嵌套一个iframe,根据左边的菜单栏选择的内容不同,iframe内的页面随之改变,现在采用的方式是点击一个菜单,然后动态创建一个iframe,加载一个jsp页面,然后点击另一个菜单加载另一个页面,为了提高速度,采用
了动态创建和动态销毁iframe的方式,这样却导致了ie最后内存泄露
//创建 var iframe = document.createElement("iframe"); iframe.src = pageURL; document.getElementById("contentDiv").appendChild(iframe); //销毁 tempFrame.src = blankPageURL; tempFrame.contentWindow.document.write(''); tempFrame.contentWindow.document.clear(); tempFrame.contentWindow.close(); document.getElementById('contentDiv').removeChild(tempFrame); tempFrame = null; CollectGarbage();
请问有什么好的解决方法或者其他的方案来实现???
今天又尝试了直接在html中使用iframe,然后动态通过iframe.src来改变页面的方式,又出现了另一个问题:点击一次可以加载出来,再点击一次又加载不出来了,然后再点击又可以加载出来,请问这是为什么????
问题补充:qiankun 写道直接改变iframe的src就可以了,创建销毁比较麻烦
我写了个简单的例子是可以直接改变的,但是应用到项目里出现的情况就是:点击一次可以加载出来,再点击一次又加载不出来了,然后再点击又可以加载出来
问题补充:xiaod0510 写道若菜单项不多的话可以每个菜单项对应一个iframe,第一次点击菜单项是新建iframe,点击其他菜单时隐藏此iframe(display:none),再次点击此菜单项的话显示此iframe,若需刷新只需重新给iframe.src属性赋值即可,至于你说的那个“点击一次可以加载出来,再点击一次又加载不出来了,然后再点击又可以加载出来”是不是缓存的事儿 ,若是的话可以增加随机数处理。
试过了,确实还是不行呢,而且我的菜单项算是比较多的,这个论坛就是比csdn给力,很快就有了答复
问题补充:lyndon.lin 写道IFRAME销毁是无法全部释放内存,所以最好不用IFRAME。如果确实要用IFRAME就使用你的第2种方式,尽量减少创建IFRAME。
建议使用iframe.contentWindow.location.replace(url)这个没有history或者
iframe.contentWindow.location = url.这个有history.
感谢你的回答,不过貌似还是不行
问题补充:gotta521 写道你可以尝试使用Sitemesh框架的渲染术,可以实现你需要的功能,网上相关资料很多,当然如果需要我这里也有。
你好,请问一下有类似的demo参考一下吗
问题补充:liulijun.cn.2011 写道用ajax,jquery.load()方法都可以实现你的要求。
把你本来想创建的iframe换成DIV。然后点击菜单的时候,调用ajax或者.load,调用后台,返回数据之后,直接填充到DIV里即可。
后台返回可以直接指向一个JSP画面。那2个方法可以直接取到填充完数据的HTML代码。
$.post("www.baidu.com", null, function(result) {
$("#div").html(result);
})
这个方法我也试过,但是有一点,这个方法返回来的其实只是那个页面的一个字符串而已,里面的js代码那样就执行不了了
问题补充:第二个问题已经解决了,是我iframe里面加载页面的问题,和iframe没有关系
问题补充:dingdang_j 写道iframe在IE6下有内存泄漏,我解决IE6是这样,但这样还是会有些内存泄漏,但没不处理严重
/**
* 跳转URL并回收资源
*/
function gotoUrl( id, url ) {
var el = document.getElementById( id ), iframe = el.contentWindow;
if( el ) {
if( $.browser.msie ) {
el.src = 'about:blank';
try {
iframe.document.write( '' );
iframe.close();
} catch( e ) {
}
}
el.src = url;
}
}
这些我都处理了阿,确实iframe内存泄露的问题无法避免阿
问题补充:nycas 写道<iframe name="myiframe" name="myiframe"></iframe>
<a href="" target="myiframe">menu</a>
这种方式是不是还是没有脱离使用iframe呢?内存能够得到解决吗?
问题补充:我发现当我打开一个模态对话框之后再关闭,IE的内存还是处于上升趋势,网上查了一下资料发现模态对话框不会导致内存增加的,这是怎么回事呢????2012年5月15日 19:13
13个答案 按时间排序 按投票排序
-
采纳的答案
IFRAME销毁是无法全部释放内存,所以最好不用IFRAME。如果确实要用IFRAME就使用你的第2种方式,尽量减少创建IFRAME。
建议使用iframe.contentWindow.location.replace(url)这个没有history或者
iframe.contentWindow.location = url.这个有history.2012年5月16日 09:38
-
<iframe name="myiframe" name="myiframe"></iframe>
<a href="" target="myiframe">menu</a>2012年5月24日 18:23
-
iframe在IE6下有内存泄漏,我解决IE6是这样,但这样还是会有些内存泄漏,但没不处理严重
/**
* 跳转URL并回收资源
*/
function gotoUrl( id, url ) {
var el = document.getElementById( id ), iframe = el.contentWindow;
if( el ) {
if( $.browser.msie ) {
el.src = 'about:blank';
try {
iframe.document.write( '' );
iframe.close();
} catch( e ) {
}
}
el.src = url;
}
}2012年5月24日 16:10
-
为什么要动态创建呢。直接改变iframe的src不更好
document.getElementById("myfirame").src=url
2012年5月21日 16:47
-
其实很简单。利用<a href = "*.jsp" target="iframeName">链接</a>
把菜单链接的target设置为iframe的name对应值就OK了2012年5月20日 19:10
-
引用这个方法我也试过,但是有一点,这个方法返回来的其实只是那个页面的一个字符串而已,里面的js代码那样就执行不了了
用jquery.load的话。返回的画面跟普通的jsp一样。可以直接在里面用<script....>标签。
而且也可以正常执行。2012年5月18日 21:47
-
引用这个方法我也试过,但是有一点,这个方法返回来的其实只是那个页面的一个字符串而已,里面的js代码那样就执行不了了
里面的JS代码都是在父画面加载的时候全部加载进去的。。。。
我给你说这个方法。都是我自己都曾经用过的。不是随口瞎说的。。。
你参照DWZ框架的设计原理就行了2012年5月18日 21:44
-
用ajax,jquery.load()方法都可以实现你的要求。
把你本来想创建的iframe换成DIV。然后点击菜单的时候,调用ajax或者.load,调用后台,返回数据之后,直接填充到DIV里即可。
后台返回可以直接指向一个JSP画面。那2个方法可以直接取到填充完数据的HTML代码。
$.post("www.baidu.com", null, function(result) {
$("#div").html(result);
})2012年5月18日 09:54
-
若菜单项不多的话可以每个菜单项对应一个iframe,第一次点击菜单项是新建iframe,点击其他菜单时隐藏此iframe(display:none),再次点击此菜单项的话显示此iframe,若需刷新只需重新给iframe.src属性赋值即可,至于你说的那个“点击一次可以加载出来,再点击一次又加载不出来了,然后再点击又可以加载出来”是不是缓存的事儿 ,若是的话可以增加随机数处理。
2012年5月16日 11:12
相关推荐
1. 在离开 iframe 里的页面之前,删除所有的事件绑定和动态创建的 DOM。 2. 刷新 iframe 内容之前,调用 iframe.contentWindow.document.write(''); iframe.contentWindow.document.close(); 强制释放 iframe 里的...
本文将探讨如何动态创建`iframe`以及如何有效地释放其占用的内存。 首先,我们来看如何动态创建`iframe`。动态创建`iframe`的方法通常是通过JavaScript来完成的,这样可以在需要时创建,不需要时销毁,以减少不必要...
- **动态创建IFRAME**:使用 `document.createElement('iframe')` 创建IFRAME,并设置其属性。 - **插入IFRAME**:将IFRAME插入到DOM的适当位置,例如 `document.body.appendChild(iframe)`。 - **设置IFRAME源**:...
在Vue.js应用中,开发人员经常需要实现动态的页面切换效果,例如在多个Tab之间进行导航。在这种场景下,原始的iframe技术可能会显得过时,因为它通常不支持单页应用(SPA)的特性,如路由管理和组件状态管理。标题...
- **性能问题**:每个iframe都需要额外的内存和处理器资源,大量使用可能导致页面加载速度变慢。 - **第三方内容控制**:由于iframe的内容可能来自外部源,所以对内容的质量和安全性难以完全掌控。 - **响应式设计...
3. **IE6 的内存问题**:在 Internet Explorer 6 (IE6) 这个古老的浏览器中,动态创建的 `iframe` 会消耗一定的内存,即使在设置 `src` 为 `about:blank` 并清除内容后,仍然会有大约 500-1000K 的内存残留。...
即使你保存了iframe节点的信息,在需要渲染时,iframe页面还是会作为一个新的窗口打开,导致内容刷新。 针对这一问题,我们可以考虑采用以下策略: 1. 使用Vue路由进行页面切换时,对于非iframe页面,正常使用`...
1. **使用 Div 实现**:创建一个全屏覆盖的黑色半透明 Div 作为遮罩层,设置 `z-index` 属性确保遮罩层位于其他元素之上。 2. **使用 Iframe 实现**:如果需要支持跨域内容的加载,可以使用 Iframe 来构建遮罩层。...
5. **清理**:打印操作完成后,插件可能会删除那个临时创建的iframe,以减少内存占用和避免不必要的副作用。 在实际使用"printPage"插件时,开发者需要确保以下几点: - **兼容性**:虽然jQuery库本身有良好的...
4. **性能优化**:合理使用iframe,避免过多的iframe导致的性能问题,比如内存占用过大、渲染延迟等。 四、模块化与组件化 现代JavaScript框架往往采用模块化和组件化的思想。模块化使得代码组织清晰,易于复用和...
1. 创建IFrame:在HTML中创建一个隐藏的IFrame元素,用于承载文件上传的表单提交结果。 2. 构建表单:创建一个动态的HTML表单,将图片文件添加到表单的input[type="file"]元素中,并设置表单的target属性为IFrame的...
通过理解和应用"DETACH-WITHIN-FRAME"策略,开发者可以创建更健壮、性能更佳的Web应用程序,同时避免因内存泄漏导致的用户体验下降。在实际开发中,结合最佳实践和适当的工具,我们可以确保JavaScript代码高效且无...
闭包的主要好处是可以保持变量的状态,创建私有变量和方法,但过度使用可能导致内存消耗增加,甚至引发内存泄漏。 3. **this的指向** `this`在JavaScript中总是指向函数的直接调用者。当使用`new`关键字创建对象时...
总的来说,`feb-alive` 是为了弥补 `keep-alive` 在处理页面级缓存上的不足,它提供了一种更优雅的方式来管理页面切换时的状态,特别是在动态路由场景下。通过利用 `history.state`,`feb-alive` 可以在不改变URL的...
- 动态添加ueditor时,需确保ueditor的所有相关资源已正确加载,否则可能导致初始化失败。 总结,ueditor通过JavaScript动态添加和移除是一项实用的技术,它可以提高网页的灵活性和用户体验。在实际开发中,结合...
- 无限嵌套iFrame可能导致浏览器性能急剧下降,因为每个iFrame都会占用资源,包括内存和CPU。因此,在实际应用中,谨慎使用嵌套iFrame,尤其是在多个层级的情况下。 - 同源策略是浏览器的一个安全机制,它限制了不...
4. **闭包**:JavaScript的闭包是函数可以访问并操作其外部作用域变量的特性,常用于实现私有变量、记忆化等功能,但不当使用可能导致内存泄漏。 5. **异步编程**:JavaScript是单线程的,因此处理耗时操作(如网络...
+修正动态创建Grid列的BUG(feedback:gxpan)。 -增加示例(data/grid_dynamic_columns.aspx)。 -修正Form不能自适应浏览器大小的改变(feedback:kaywood)(WorkItem#6309)。 -增加重载方法Alert.Show(message, ...
1. JSONP:通过动态创建script标签实现跨域请求。 2. CORS:跨源资源共享,服务器设置特定响应头允许跨域请求。 3. postMessage:窗口、iframe间的跨域通信工具。 八、JavaScript安全 1. 防止XSS攻击:对用户输入...
+修正动态创建Grid列的BUG(feedback:gxpan)。 -增加示例(data/grid_dynamic_columns.aspx)。 -修正Form不能自适应浏览器大小的改变(feedback:kaywood)(WorkItem#6309)。 -增加重载方法Alert.Show(message, ...