先说下问题产生的场景, 浏览器是IE6
我有一个页面A,
A 里面有一个表单B,
表单B 中的一个元素C
一个iframe 页面D
当表单B 提交的时候,D 会传递值给C,在一般情况下, 这样提交表单B 是没有问题的。
问题的触发:因为我后面加多一个操作, 需要向D 传递一个参数, 但是只能通过D 的src 链接传送给D,
如果原来D 的src 是“myEditor?canshu1=aa&canshu2=bb”; lin49940
因为某个操作需要传多一个参数canshu3, 所以把D 的src 变为“myEditor?canshu1=aa&canshu2=bb&canshu3=cc”
这时候不会有任何错误发生, 当时只要到了表单最后提交的那一下, 就会报错误"不能执行已释放的 Script 的代码"
问题的原因: 了解到了触发的操作, 问题应该是元素C 和 子页面D 有了引用关系,把D的src 变化后, 页面D 是会进行重新加载的,但是原来的引用关系没有解除,
这样导致提交的时候,无法正常释放内存。
问题的解决:说实话,问题的解决方法, 我是没有明确的方向的,百度也没有什么有用的信息, 最后是通过各种尝试, 才终于解决了的。
希望能帮助大家,一起提高。
可以通过disabled 让页面D 的iframe 无效,这样就解除了引用关系,同时隐藏iframe D。
然后添加多一个iframe E 加载“myEditor?canshu1=aa&canshu2=bb&canshu3=cc”,让E 和元素C 建立引用关系,
D.style.disabled=true;
D.style.display='none';
E.src =“myEditor?canshu1=aa&canshu2=bb&canshu3=cc”;
E.style.display='';
实际操作的话, iframe E 可以是动态生成, 也可以是固定在页面然后进行隐藏,具体看自己业务需要了。