2011-09-07 60 views
3

我們正在爲Facebook寫app。這是一款用flash編寫的遊戲,內嵌wmode窗口。我們遇到問題Firefox 6,但只在Windows XP。當用戶調用某個Facebook對話框(例如:付費對話框或購買更多信用對話框)時,閃光消失。當用戶點擊通知(頂級Facebook菜單中的地球圖標)並保持一段時間(但這並不重要)時,也會發生這種情況。調用Facebook對話框後Flash(wmode = window)消失

閃光消失後,它仍然在DOM中作爲<object>。 創建wallpost對話框時不會發生這種情況。

如何解決?

我們不能改變wmode,所以這種方式是不可能的。

回答

4

FB.init文檔:https://developers.facebook.com/docs/reference/javascript/FB.init/#flash爲您提供了一些選擇,如果您的應用程序無法使用wmode =「opaque」,那麼您可以選擇做比顯示白色背景更好的選項。上facebook.com

的Adobe Flash應用程序對於使用Adobe Flash,WMODE = 「不透明」 畫布上的應用是優選的 只要有可能。我們發現,在具有 硬件合成的現代瀏覽器中,使用wmode =「opaque」的 通常沒有性能下降。否則,在默認情況下,當彈出事件發生時,Facebook將默認隱藏您的Flash對象,並在彈出窗口被取消時重新顯示它們。

如果需要使用WMODE =「窗口」,並希望控制這種 行爲(如還示出文本或當發生這種情況的圖像)你 可以提供一個函數進hideFlashCallback參數 FB。在裏面。 hideFlashCallback將一個狀態字段作爲傳入的 的一部分,用於指示窗口是打開還是關閉。 這是你會被重寫,如果你 提供一個默認的實現,也可能給你一個什麼樣的覆蓋會 看起來像一個想法:

function(params) { 
    var candidates = window.document.getElementsByTagName('object'); 
    for (var i = 0; i < candidates.length; i++) { 
    var elem = candidates[i]; 
    if (elem.type != "application/x-shockwave-flash") { 
     continue; 
    } 

    var good = false; 
    for (var j = 0; j < elem.childNodes.length; j++) { 
     if (elem.childNodes[j].nodeName == "PARAM" && elem.childNodes[j].name == "wmode") { 
     if (elem.childNodes[j].value != "window" && elem.childNodes[j].value != "default") { 
      good = true; 
     } 
     } 
    } 
    if (!good) { 
     if (params.state == 'opened') { 
     elem.style.old_visibility = elem.style.visibility; 
     elem.style.visibility = 'hidden'; 
     } else if (params.state == 'closed') { 
     elem.style.visibility = elem.style.old_visibility; 
     elem.style.old_visibility = ''; 
     } 
    } 
    } 
} 

注:有些用戶界面的方法,如stream.publish和stream.share可以使用 而無需註冊應用程序或調用此方法。如果您正在使用 應用程序ID,則必須在此方法之後調用所有方法。

+0

請參閱https://developers.facebook.com/docs/hideflashcallback/以獲取有關最佳實踐的最新文檔,其中包括添加屏幕截圖的功能。 –