调用 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 上的 Adobe Flash 应用程序
对于使用 Adobe 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 iOS 的 feed 发布对话框在登录后消失?
如何在 Facebook Flash 应用程序中进行身份验证?