在IE中关闭Iframe时出错

时间:2014-06-13 18:39:24

标签: javascript jquery iframe highslide

使用Highslide打开包含Iframe内部视频的网站。这一切都很好,除了在IE中。当我关闭Highslide(并删除内部的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

如果我在错误发生后立即重新打开完全相同的Highslide Iframe,它会毫无问题地打开,但在关闭时仍然有错误。老实说,我真的很难以解决这个问题。

2 个答案:

答案 0 :(得分:2)

听起来你遇到的是IE的一个奇怪的角落错误。基本上,如果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的奇怪疾病,但它似乎有时消除错误,基本上以相同的方式工作。 :)

答案 1 :(得分:0)

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关闭问题。