在IE中关闭Iframe时出错

Error when closing Iframe in IE

本文关键字:Iframe 出错 IE      更新时间:2023-09-26

制作一个在Iframe内使用Hililide打开的视频网站。这一切都很好,除了IE。当我关闭Hililide(并删除其中的Iframe)时,我得到这些错误消息:

SCRIPT5007: Unable to get property 'random' of undefined or null reference
File: jquery.min.js, Line: 2, Column: 1711
SCRIPT5009: 'jQuery' is undefined
File: flowplayer.min.js, Line: 6, Column: 1
SCRIPT5009: 'flowplayer' is undefined
File: index.php, Line: 20, Column: 4

偶尔我得到一个重复的错误:

SCRIPT445: Object doesn't support this action
File: jquery.min.js, Line: 2, Column: 4058

如果我在错误发生后重新打开完全相同的Hililide Iframe,它会打开没有任何问题,但仍然有关闭错误。我真的不知道该怎么解决这个问题。

听起来你遇到的是IE的一个奇怪的角落bug。基本上,如果iframe在另一个元素中,在某些情况下,当该元素被销毁时,iframe中的脚本将再次运行,这次没有上下文—像ObjectMath这样的内容将会消失。

因为这些脚本运行在一个被破坏的iframe上,我发现这些错误通常是无害的,但我仍然不喜欢它们。

我发现IE和jQuery(1.11.0)之间的交互似乎会导致这个问题。尝试先使用纯DOM调用清空包含iframe的元素:

                // Instead of:
                //$('div').empty();
                // Run this:
                var div = $('div')[0];
                while (div.firstChild) {
                    div.removeChild(div.firstChild);
                }

不知道为什么这会起作用,甚至如果在大多数情况下都起作用(它在我的沙箱中起作用,但在实际代码中不起作用),并且对进一步诊断IE的奇怪疾病没有兴趣,但它似乎有时会消除错误并且基本上以相同的方式工作。:)

highslide-full.js文件(版本为4.1.12)中,在afterClose函数中(大约在第2926行左右),您应该发现如下:

if (this.outline && this.outlineWhileAnimating) this.outline.destroy();

在这行之后,加上:

if (this.iframe) {
  this.body.removeChild(this.iframe);
}

我们已经用额外的代码解决了IE9关闭问题。