2013-04-08 39 views
4

可能的'__flash__removeCallback' is undefined when deleting DOM element with Youtube iframe__flash__removeCallback是IE9不確定的錯誤,同時去除DOM元素

重複我通過一些網站去,但不能發現的,爲什麼YouTube的同時除去YouTube的iframe和DOM元素拋出該異常的精確解什麼是解決方案?

一些解決方案,我有如下:

  1. ytplayer.getIframe().src=''; - >我不知道這是怎麼解決我的問題?

2. $('#youtube iframe').attr('src', ''); $('#youtube').remove() - >我已經嘗試過,但不會工作。

3.隱藏iframe前刪除父元素 - >將無法正常工作。

請幫我解決這個問題。

+0

請幫忙嗎? – 2013-04-10 15:19:10

回答

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)將得到視頻播放器關閉您的網頁,沒有拋出任何_ 閃光燈 _remove ..警告。

如果您需要在視頻播放器的狀態在YouTube API /控制:

你試過調用在YouTube播放的「消滅」 - 方法?取消銷燬,雖然我不願意使用超時發佈「答案」,但給Flash對象一些時間來取消註冊,然後將iframe的源設置爲空字符串(以便文檔卸載),然後清除iframe或它父容器。

雖然我記得從前一個項目中,這讓我們發瘋(上下文是一個單頁面的界面,動態地添加和刪除視頻),並且我們使用AS3 YT代碼編寫了我們自己的Flash Player後備。這是多麼惱人的。

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導致內存泄漏。

0

這在IE9中適用於我。

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

您也可以通過用自己的覆蓋函數修復Flash的回調移除函數。這個問題不僅僅與視頻應用程序有關。在下面的例子中,我在頁面被卸載之前覆蓋它,但它可能在swf加載後隨時發生。

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