调用facebook对话框后,Flash(wmode = window)消失

时间:2011-09-07 10:44:52

标签: flash facebook firefox swfobject firefox6

我们正在为facebook编写应用程序。这是一个用flash编写的游戏,嵌入了 wmode窗口。我们遇到 Firefox 6 的问题,但仅限于 Windows XP 。当用户调用某些Facebook对话框(例如:付费对话框或购买更多信用对话框)时,闪光灯会消失。当用户点击通知(顶部Facebook菜单中的地球图标)并保持一段时间(但这不是那么重要)时,也会发生这种情况。

闪光灯消失后,它仍然在<object>的DOM中。 创建wallpost对话框时不会发生这种情况。

如何解决?

我们无法更改wmode ,所以这种方式是不可能的。

1 个答案:

答案 0 :(得分:4)

FB.init文档:https://developers.facebook.com/docs/reference/javascript/FB.init/#flash为您提供了一些选项,可以在您的应用程序无法使用wmode =“opaque”时显示白色背景。

  

facebook.com上的Adobe Flash应用程序

     

对于使用Adobe Flash的Canvas应用程序,首选wmode =“opaque”   只要有可能。我们发现,在现代浏览器上   硬件合成,一般没有性能下降   使用wmode =“opaque”。否则,Facebook默认会隐藏你的   弹出事件发生时的Flash对象,并在弹出时重新显示它们   弹出窗口被驳回。

     

如果你需要使用wmode =“window”,并想控制它   行为(例如,当发生这种情况时也显示文本或图像)你   可以在hideFlashCallback参数中提供一个函数   FB.init。 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 = '';
      }
    }
  }
}
     

注意:可以使用某些UI方法,如stream.publish和stream.share   没有注册应用程序或调用此方法。如果你正在使用   app id,必须在此方法之后调用所有方法。