Javascript __在删除dom元素时,flash__removeCallback是IE9中未定义的错误

Javascript __在删除dom元素时,flash__removeCallback是IE9中未定义的错误,javascript,jquery,html,youtube,internet-explorer-9,Javascript,Jquery,Html,Youtube,Internet Explorer 9,可能是复制品 我浏览了一些网站,但找不到确切的解决方案,说明为什么youtube在使用youtube iframe删除dom元素时抛出此异常,以及解决方案是什么 我得到的一些解决方案是: ytplayer.getIframe().src=''->我不知道这怎么能解决我的问题 2.$('#youtube iframe').attr('src',''); $(“#youtube”).remove()->我已经尝试过这个方法,但不起作用 3.在删除父元素之前隐藏iframe->将不起作用 请帮助我解决

可能是复制品

我浏览了一些网站,但找不到确切的解决方案,说明为什么youtube在使用youtube iframe删除dom元素时抛出此异常,以及解决方案是什么

我得到的一些解决方案是:

  • ytplayer.getIframe().src=''->我不知道这怎么能解决我的问题
  • 2.
    $('#youtube iframe').attr('src','');
    $(“#youtube”).remove()
    ->我已经尝试过这个方法,但不起作用

    3.在删除父元素之前隐藏iframe->将不起作用


    请帮助我解决此问题。

    这似乎是一个仅限IE9的错误

    当一个Flash对象使用JavaScript(Flash/ActionScript端的ExternalInterface)与一个HTML文档交互时,就会发生这种情况,当一个包含HTML文档和Flash对象的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的“EmbeddeSWF”和“removeSWF”来完成此操作),这样就可以使视频播放器脱离您的页面,而无需抛出任何“flash”或“remove”。。警告

    如果您需要YouTube API/控制视频播放器状态:

    你试过在玩家身上调用“destroy”方法吗?取消调用destroy,虽然我不愿意使用超时来发布“答案”,但在将iframe的源设置为空字符串(以便文档卸载)之前,请给Flash对象一些时间来取消注册,然后清除iframe或其父容器


    虽然我记得在以前的一个项目中,这让我们抓狂(上下文是动态添加和删除视频的单页界面),我们求助于使用AS3 YT代码编写我们自己的Flash播放器回退。这就是它的恼人之处。

    下面的代码应该可以跨所有浏览器工作(并且不会产生您上面描述的IE9/IE10错误)


    最终的结果是,当点击按钮时,将加载一个视频,并将安全地删除该视频,而不会导致IE9/IE10中的内存泄漏。

    这在IE9中对我很有效

     $(window).unload(function() {
            jwplayer('video1').stop();
            jwplayer('video1').remove();
            $(window).remove();
        });
    

    您还可以通过使用自己的函数覆盖Flash的回调移除函数来修复它。这个问题不仅仅与视频应用程序有关。在下面的示例中,我会在页面卸载之前覆盖它,但它可以在swf加载之后的任何时候发生

    window.onbeforeunload=函数(){
    此.\uuuu flash\uuuu removeCallback=函数(实例,名称){
    if(instance==null)返回//
    
     $(window).unload(function() {
            jwplayer('video1').stop();
            jwplayer('video1').remove();
            $(window).remove();
        });