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

Posted

技术标签:

【中文标题】调用 facebook 对话框后 Flash (wmode=window) 消失【英文标题】:Flash (wmode=window) disappears after calling facebook dialog 【发布时间】:2011-11-12 01:13:12 【问题描述】:

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

flash 消失后它仍然在 DOM 中为<object>。 创建墙贴对话框时不会发生这种情况。

如何解决?

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

【问题讨论】:

【参考方案1】:

FB.init 文档:https://developers.facebook.com/docs/reference/javascript/FB.init/#flash 为您提供了一些选项,如果您的应用程序无法与 wmode="opaque" 一起工作,您可以做一些比显示白色背景更好的事情。

facebook.com 上的 Adob​​e Flash 应用程序

对于使用 Adob​​e Flash 的 Canvas 应用程序,首选 wmode="opaque" 只要有可能。我们发现,在现代浏览器上 硬件合成,一般不会降低性能 使用 wmode="不透明"。否则,Facebook 将默认隐藏您的 在弹出事件发生时闪烁对象,并在弹出事件发生时重新显示它们 弹出窗口被关闭。

如果你需要使用 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,所有方法都必须在这个方法之后调用。

【讨论】:

请参阅 developers.facebook.com/docs/hideflashcallback 了解有关最佳做法的最新文档,包括添加屏幕截图的功能。

以上是关于调用 facebook 对话框后 Flash (wmode=window) 消失的主要内容,如果未能解决你的问题,请参考以下文章

Facebook 请求提示未在 Firefox 中加载游戏

为啥 Facebook iOS 的 feed 发布对话框在登录后消失?

如何在 Facebook Flash 应用程序中进行身份验证?

在Facebook对话框中单击关闭(交叉)按钮时未调用onCancel()方法

Facebook 分享回调不起作用

Facebook 连接对话框未关闭