【问题标题】:__flash__removeCallback is undefined errors in IE9 while removing the dom element__flash__removeCallback 是 IE9 中的未定义错误,同时删除 dom 元素
【发布时间】:2013-03-31 00:25:56
【问题描述】:

可能是'__flash__removeCallback' is undefined when deleting DOM element with Youtube iframe的副本

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

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

  1. ytplayer.getIframe().src=''; -> 我不知道这如何解决我的问题?

2.$('#youtube iframe').attr('src', ''); $('#youtube').remove() -> 我试过了,但是不行。

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

请帮我解决这个问题。

【问题讨论】:

    标签: javascript jquery html youtube internet-explorer-9


    【解决方案1】:

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

    当 Flash 对象使用 JavaScript(Flash/ActionScript 端的外部接口)与 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”就可以了)将使视频播放器离开您的页面,而不会引发任何 _flash_remove.. 警告。

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

    您是否尝试过在 ytplayer 上调用“destroy”方法?取消销毁,虽然我不愿意使用超时发布“答案”,但在将 iframe 的源设置为空字符串(以便文档卸载)之前,给 Flash 对象一些时间来取消注册,然后清除 iframe 或者它是父容器。

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

    【讨论】:

      【解决方案2】:

      以下代码应该适用于所有浏览器(并且不会产生您上面描述的 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 中的内存泄漏。

      【讨论】:

        【解决方案3】:

        这在 IE9 中对我有用。

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

        【讨论】:

          【解决方案4】:

          您还可以通过使用自己的覆盖来修复 Flash 的回调删除功能。此问题与视频应用程序无关。在下面的示例中,我在页面卸载之前覆盖它,但它可以在 swf 加载后的任何时间发生。

          window.onbeforeunload = function () { this.__flash__removeCallback = function (instance, name) { if (instance == null) return; // <-- this line prevents the error instance[name] = null; } }

          【讨论】:

            猜你喜欢
            • 2012-07-17
            • 1970-01-01
            • 1970-01-01
            • 2011-09-21
            • 1970-01-01
            • 1970-01-01
            • 2012-09-05
            • 1970-01-01
            • 2018-12-03
            相关资源
            最近更新 更多