Flash (wmode = window) исчезает после вызова диалога facebook - PullRequest
3 голосов
/ 07 сентября 2011

Мы пишем приложение для Facebook.Это игра, написанная на flash и встраиваемая с окном wmode .У нас проблема с Firefox 6 , но только на Windows XP .Когда пользователь вызывает какой-либо диалог Facebook (например, диалог оплаты или диалог покупки дополнительных кредитов), вспышка исчезает.То же самое происходит, когда пользователь нажимает на уведомления (значок глобуса в верхнем меню Facebook) и удерживает их некоторое время (однако это не так важно).

После того, как флэш исчезает, он все еще находится в DOM как <object>.Этого не происходит при создании диалогового окна Wallpost.

Как это исправить?

Мы не можем изменить wmode , поэтому этот способ невозможен.

1 Ответ

4 голосов
/ 08 сентября 2011

Документация FB.init: https://developers.facebook.com/docs/reference/javascript/FB.init/#flash дает вам несколько вариантов для того, чтобы сделать что-то лучше, чем отображение белого фона, если ваше приложение не будет работать с wmode = "opaque".

Приложения 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 можно использовать без регистрации приложения или вызова этого метода.Если вы используете идентификатор приложения, все методы должны вызываться после этого метода.

...