3

Facebookのアプリを書いています。これは、flash で作成され、 wmode windowが埋め込まれたゲームです。Firefox 6で問題が発生しますが、 Windows XPでのみ発生します。ユーザーが Facebook のダイアログ (たとえば、支払いダイアログやクレジットの追加購入ダイアログ) を呼び出すと、フラッシュが消えます。これは、ユーザーが通知 (上部の Facebook メニューにある地球のアイコン) をクリックしてしばらく保持したときにも発生します (ただし、これはそれほど重要ではありません)。

フラッシュが消えた後も、DOM として<object>. これは、ウォールポスト ダイアログが作成された場合には発生しません。

修正方法は?

wmode を変更できないため、この方法は不可能です。

4

1 に答える 1

4

FB.init ドキュメント: https://developers.facebook.com/docs/reference/javascript/FB.init/#flashには、アプリケーションが wmode= で動作しない場合に、白い背景を表示するよりも優れた方法を実行するためのいくつかのオプションが示されています。 「不透明」。

facebook.com の Adob​​e Flash アプリケーション

Adobe Flash を使用する Canvas アプリケーションの場合、可能な限り wmode="opaque" が推奨されます。ハードウェア合成を備えた最新のブラウザーでは、通常、wmode="opaque" を使用してもパフォーマンスが低下しないことがわかりました。そうしないと、Facebook はデフォルトで、ポップアップ イベントが発生したときに Flash オブジェクトを非表示にし、ポップアップが閉じられたときにそれらを再表示します。

wmode="window" を使用する必要があり、この動作を制御したい場合 (これが発生したときにテキストや画像を表示するなど)、FB.init の hideFlashCallback パラメータに関数を指定できます。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 などの一部の UI メソッドは、アプリを登録したり、このメソッドを呼び出したりしなくても使用できます。アプリ ID を使用している場合は、このメソッドの後にすべてのメソッドを呼び出す必要があります。

于 2011-09-08T09:04:58.047 に答える