Flash (wmode=window) исчезает после вызова диалога facebook
Мы пишем приложение для Facebook. Это игра, написанная на flash и встраиваемая с окном wmode. У нас проблема с Firefox 6, но только в Windows XP. Когда пользователь вызывает диалог Facebook (например, диалог оплаты или диалог покупки дополнительных кредитов), вспышка исчезает. То же самое происходит, когда пользователь нажимает на уведомления (значок глобуса в верхнем меню Facebook) и удерживает их некоторое время (однако это не так важно).
После того как флеш пропадает это он еще в DOM как <object>
, Этого не происходит при создании диалогового окна.
Как это исправить?
Мы не можем изменить wmode, поэтому этот путь невозможен.
1 ответ
Документация по FB.init: https://developers.facebook.com/docs/reference/javascript/FB.init/ дает вам несколько возможностей сделать что-то лучше, чем отображение белого фона, если ваше приложение не будет работать с wmode="непрозрачный".
Приложения Adobe Flash на facebook.com
Для приложений Canvas, использующих Adobe Flash, 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 = ''; } } } }
Примечание. Некоторые методы пользовательского интерфейса, такие как stream.publish и stream.share, можно использовать без регистрации приложения или вызова этого метода. Если вы используете идентификатор приложения, все методы должны быть вызваны после этого метода.