使用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,它会毫无问题地打开,但在关闭时仍然有错误。老实说,我真的很难以解决这个问题。
答案 0 :(得分:2)
听起来你遇到的是IE的一个奇怪的角落错误。基本上,如果iframe在另一个元素中,在某些情况下,当该元素被销毁时,iframe中的脚本将再次运行,这次没有上下文 - Object
和Math
之类的内容将只是走了。
因为这些脚本是在销毁的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关闭问题。