可能是'__flash__removeCallback' is undefined when deleting DOM element with Youtube iframe
的副本我浏览了一些网站但是找不到确切的解决方案,为什么youtube会在使用youtube iframe移除dom元素时引发此异常,这将是什么解决方案?
我得到的一些解决方案是:
ytplayer.getIframe().src='';
- >我不知道这怎么能解决我的问题? 2. $('#youtube iframe').attr('src', '');
$('#youtube').remove()
- >我试过这个但是没有成功。
3.hide iframe删除父元素之前 - >没有工作。
请帮我解决此问题。
答案 0 :(得分:3)
这似乎只是IE9的错误。
当Flash对象使用JavaScript(Flash / ActionScript端的ExternalInterface)与HTML文档交互时会发生这种情况,当包含带有Flash对象的HTML文档的IFRAME进入游戏时,它就会变得丑陋。
看到你如何指定你正在使用YouTube API,遗憾的是你无法做任何事情来确保Flash取消注册本身并且在你依赖它时需要删除它时不会调用JavaScript函数(反之亦然)在应用程序域外运行的第三方软件。
如果您不需要YouTube API,但只是在应用程序中获取视频的快捷方式,最安全的选择是使用嵌入IE9的旧样式对象和其他的API / IFRAME嵌入理智的世界。
<object width="{WIDTH}" height="{HEIGHT}">
<embed src="https://www.youtube.com/v/{VIDEO_ID}?version=3&autoplay=1"
type="application/x-shockwave-flash"
allowscriptaccess="always"
width="{WIDTH}" height="{HEIGHT}"></embed>
</object>
删除上面的对象(你可以使用SWFObject的“embedSWF”和“removeSWF”就好了这个btw)会让视频播放器离开你的页面,而不会抛出任何_ flash _remove ..警告。
如果您需要YouTube API /控制视频播放器状态:
您是否尝试过在ytplayer上调用“destroy”方法?撤消销毁,虽然我不愿意使用超时发布“答案”,但是在将iframe的源设置为空字符串(因此文档卸载)之前,请给Flash对象一些时间取消注册,然后清除iframe或者它是父容器。
虽然我记得以前的一个项目,这让我们很生气(上下文是单页界面,动态添加和删除视频)我们使用AS3 YT代码编写自己的Flash播放器后备。这有点令人讨厌。
答案 1 :(得分:1)
以下代码应适用于所有浏览器(并且不会产生您在上面描述的IE9 / IE10错误)。
function playVideo() {
$('#video iframe').attr('src', 'http://www.youtube.com/embed/VIDEO_ID_HERE');
$('#video iframe').fadeIn();
}
function stopVideo() {
$('#video iframe').attr('src', '');
$('#video').fadeOut();
}
最终结果是在单击按钮时加载的视频,并且可以安全地删除视频而不会导致IE9 / IE10中的内存泄漏。
答案 2 :(得分:0)
这在IE9中对我有用。
$(window).unload(function() {
jwplayer('video1').stop();
jwplayer('video1').remove();
$(window).remove();
});
答案 3 :(得分:0)
您还可以通过自己覆盖Flash来修复Flash的回调删除功能。此问题与视频应用无关。在下面的示例中,我在页面卸载之前覆盖它,但它可能在swf加载后的任何时候发生。
window.onbeforeunload = function () {
this.__flash__removeCallback = function (instance, name) {
if (instance == null) return; // <-- this line prevents the error
instance[name] = null;
}
}