1

swfObjectを使用してアプリにFlashPlayerを埋め込みます。埋め込まれたフラッシュオブジェクトと通信しようとすると、FireFoxでエラーが発生することがあります(IEまたはChromeでは発生しません)。エラーには、「SetVariableは関数ではありません」と表示されます。このエラーの原因となるコードは、ほんの少し前に正常に実行され、現在このエラーを示しています。ページを再読み込みして再実行すると、これが二度と起こらない可能性は十分にあります。

FFがSetVariableでうまく機能しないという報告をウェブ上で見ましたが、それを修正するものは何もありません。どうやらswfObjectはこれをすべて隠す必要がありますが、そうではありません。

私のコードは次のようになります。

...
var flashvars=...
var params=...
var attributes = {};
attributes.id = "my_player";

if( swfobject.hasFlashPlayerVersion("9.0.0") )
{
    swfobject.embedSWF("my_player_js.swf", "my_player_holder", "1", "1", "9.0.0", "", flashvars, params, attributes );
}
....

document.getElementById("my_player").SetVariable( "method:stop", "");

FFの最後の行で、「SetVariableは関数ではありません」というエラーが発生することがあります。

どこを見るべきかについての提案はありますか?

4

3 に答える 3

2

エラー .SetVariable is not a function in Firefox の 1 つの解決策は次のとおりです。

Id および Name 属性に、Object タグの id および name 値とは異なる値を指定します。

var isInternetExplorer = navigator.appName.indexOf("Microsoft") != -1;
// Handle all the FSCommand messages in a Flash movie.
var bannerObj = isInternetExplorer ? document.all.banner : document.banner;
function getFlashMovieObject(movieName)
{
  if (window.document[movieName]) 
  {
      return window.document[movieName];
  }
  if (navigator.appName.indexOf("Microsoft Internet")==-1)
  {
    if (document.embeds && document.embeds[movieName])
      return document.embeds[movieName]; 
  }
  else // if (navigator.appName.indexOf("Microsoft Internet")!=-1)
  {
    return document.getElementById(movieName);
  }

}

function LoadRefference()
{
 bannerObj = getFlashMovieObject("banner");
 if(typeof(bannerObj.SetVariable)=='undefined')
    bannerObj = document.getElementById('embbanner');
}

ドキュメントが完全に読み込まれた後に LoadRefference が呼び出されることを確認してください。document.ready メソッドで呼び出すことができます。

ムハンマド・ハリド・ヌール

于 2011-08-29T11:01:41.990 に答える
1

代わりに ExternalInterface を使用する必要があります。これは SetVariable よりもはるかに堅牢です (低速ですが、本当に速度が必要でない限り、それを使用する必要があります)。

通常、これを引き起こす一般的なケースの 1 つは、swf がロードされる前に SetVariable 呼び出しを呼び出そうとすることです。通常、メソッドを呼び出す前に、swf でページを呼び出して、呼び出しを受け取る準備ができていることを js に伝える方が安全です。

「このエラーの原因となったコードはほんの少し前に正常に実行された」と言うので、上記は問題ではないかもしれないと思いますが、とにかく確認する価値があります。おそらく、ページの swf を変更している場合、ブラウザはそれを再読み込みしようとして、一度に数ミリ秒間消えてしまうのでしょうか?

于 2009-09-09T22:37:26.153 に答える
0

swfObjectまたはFlashはわかりませんが、初期化される前にオブジェクトでコードを実行すると、これらと同様のエラーが頻繁に発生します。コードを実行するきっかけは何ですか?オンロード?DOMContentLoaded?

于 2009-09-08T10:42:35.587 に答える