我们正在为facebook编写应用程序。这是一个用flash编写的游戏,嵌入了 wmode窗口。我们遇到 Firefox 6 的问题,但仅限于 Windows XP 。当用户调用某些Facebook对话框(例如:付费对话框或购买更多信用对话框)时,闪光灯会消失。当用户点击通知(顶部Facebook菜单中的地球图标)并保持一段时间(但这不是那么重要)时,也会发生这种情况。
闪光灯消失后,它仍然在<object>
的DOM中。
创建wallpost对话框时不会发生这种情况。
如何解决?
我们无法更改wmode ,所以这种方式是不可能的。
答案 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,必须在此方法之后调用所有方法。