在尝试修改Ext库,完善内存释放时发现
不管怎么改,form节点都一直释放不掉
自己写例子时,就算创建了dom节点后只赋给一个变量,sIEve显示的引用也有3个
抓狂了很久以后,上网查了下资料,发现是IE在作怪:
http://blog.archive.jpsykes.com/92/ie6-form-tag-orphans/index.html
作者也试过很多办法来清除,无一例外全失败了。
引用
Approaches Tested
* innerHTML on parent (most common garbage collection)
* Using removeNode, rather than removeChild
* Using replaceNode before removing it
* Resetting all variables before removing it
* Giving it a HasLayout (I was desperate)
* Setting AutoComplete to off on the form
* collectGarbage()
* Crockfords Purge
* …
后面给的一个例子,其实是重用form节点:
function MyForm() {
this.InstanceId = ''+MyForm.InstanceCounter++;
MyForm.Instances[this.InstanceId] = this;
for( var key in MyForm.Recycle ) {
this.Node = MyForm.Recycle[key];
delete MyForm.Recycle[key];
}
if( this.Node==null ) {
this.Node = document.createElement('FORM');
}
this.Node.InstanceId = this.InstanceId;
}
MyForm.prototype.InstanceId = null;
MyForm.prototype.Node = null;
MyForm.prototype.destroy = function() {
if( this.Node.parentNode ) this.Node.parentNode.removeChild(this.Node);
MyForm.Recycle[this.InstanceId] = this.Node;
delete MyForm.Instances[this.InstanceId];
this.Node = null;
}
MyForm.InstanceCounter = 1;
MyForm.Instances = {};
MyForm.Recycle = {};
// create and destroy 10000 forms
var a;
for( var i = 0; i <= 5000; i++){
//create a new form
var b = new MyForm();
// add the new form to the body
var a = document.body.appendChild(b.Node);
//destroy the form
b.destroy();
//break;
}
无奈中。。。又不敢直接修改Ext框架的逻辑
看在这个节点占用内存也不多的面子上,不管它了。
分享到:
相关推荐
总之,从IE6升级到IE9的过程,开发者需要关注HTML的规范性、CSS的兼容性和JavaScript/DOM的适应性,以确保网页在新版本的IE中正常运行。同时,对于可能出现的视觉差异和功能缺失,需要进行有针对性的调整和优化。
1. 结束标记问题:在 IE7-IE8 中,如果缺少结束标记的 P 元素后跟 TABLE、FORM、NOFRAMES 或 NOSCRIPT 元素,会自动添加结束标记。解决办法是,确保所有 HTML 元素都有正确的结束标记。 2. 有效标记支持:IE8 开始...
在 Web 开发中,中文乱码问题是一个常见的问题,尤其是在FORM表单传递参数时。这个问题的根本原因是对中文的编码与解码方式不一致。我们可以理解为对中文的加密与解密的密钥不一致。例如,用UTF-8对中文编码而用ISO-...
本文旨在系统梳理IE6至IE9之间遇到的主要兼容性问题,并提出相应的解决策略。 ## 第一章:HTML ### 第一节:IE7-IE8更新 #### 1. 如果缺少结束标记的`<p>`元素后跟`<table>`, `<form>`, `<noframes>`或`...
标题“IE6的POST请求无data的的问题”所提及的是一个经典的前端开发中遇到的技术难题,主要涉及到浏览器兼容性问题,特别是针对老版本的Internet Explorer(IE6)。在Web应用程序中,POST请求是向服务器发送数据的一...
如果遇到问题,可以查看`Unit2.pas`和`Unit2.dfm`文件,理解并调试代码。 通过理解和应用上述知识点,你可以掌握在Delphi中删除`TreeView`节点及其子节点的方法,这对于开发涉及树形结构数据管理的应用程序非常重要...
需求2:流程图中的节点之间可以进行连线交互 需求3:点击对应的节点后可以进行操作节点(删除、查看节点的相关信息参数) 需求4:鼠标悬浮在连线上时可以删除当前连线 隐含需求:节点样式需要满足`UI`设计,所以需要...
在"metalink"这个文件中,用户可能能找到Oracle官方对EBS Form个性化问题的解答,以及社区专家的经验分享。通过查阅Metalink,开发者可以获取最新的技术更新,解决遇到的问题,并学习最佳实践。 总的来说,EBS Form...
本话题主要关注如何实现“单击`TreeView`中的一个节点时,右侧窗体加载相应内容”的功能。这种设计常用于构建具有导航功能的用户界面,提升用户体验,使用户能够快速访问所需信息。 首先,我们需要理解`TreeView`...
6. **变量名与HTML对象id相同问题**:在Firefox中,对象ID不会被视为JavaScript变量名,而在IE中可以。为避免歧义,应在声明变量时加上`var`关键字,并避免使用与HTML对象ID相同的变量名。 7. **event.x与event.y...
接下来的问题是:如何实现在`Form2`中的某个操作能够反过来影响`Form1`中的某些控件状态或行为?这个问题在多窗体应用中十分常见且实用。 #### 解决方案概述 本文将详细介绍一种通过使用C#中的引用参数(`ref`)来...
在`Form3`的构造函数中,`treeView1.Nodes[0].Expand()`这行代码表示展开树图的第一个节点,这意味着在程序启动时,用户能看到树图的第一个层级。 接下来,`OpenFileDialog`用于让用户选择Excel文件,`xsldata`函数...
避免在主应用程序中直接释放DLL的FORM对象。 - 异步操作:如果DLL中的FORM涉及到复杂的异步操作,需要考虑线程同步和通信问题。 - 错误处理:在调用DLL函数时,应检查返回值和可能出现的错误。 5. **调试与测试**...
在给定的代码片段中,我们可以看到一个基础的`TreeView`控件节点创建过程,尽管代码中包含了一些非标准字符,但核心逻辑依然清晰。下面,我们将深入探讨这一知识点,包括`TreeView`控件的基本概念、如何在C#中使用它...
Form表单问题
这在开发GUI应用程序时尤为常见,例如一个窗体(Form1)打开另一个窗体(Form2),然后Form2执行某些操作并返回结果给Form1,或者调用Form1中的方法。这个过程可以通过多种方式实现,其中一种常见且灵活的方法是使用...
在C#编程中,Form1和Form2之间的数据传递是一个常见的需求,特别是在开发Windows桌面应用程序时。本主题将深入探讨如何在两个独立的窗体之间有效地传递数据,以实现Form1的TextBox控件值传递到Form2,以及Form2的...
ie8和ie9浏览器下兼容问题; 1、bootstrap3部分样式失效,在页面中引用respond.min.js和html5shiv.min.js ; 2、另外提供formData不可用情况下使用的jquery.form.min.js资源文件