2011-01-07 13 views
2

JavaScriptを使用して、ExternalInterfaceを使用してAS3関数を実行しようとしています。 IEでうまく動作するようですが、Firefoxは常にjavascriptエラーメソッドを返しません。AS3 ExternalInterfaceはIEでは動作しますがFirefoxでは動作しません

私は年齢のためにこれをグーグルで、次の可能性を排除されています、一部の人々は、あなたのobjectタグ内のembedタグを持っている必要がありますと言う)

1のように1を追加 - 運を。

2)多くの人が、あなたのフラッシュがJavaScriptを呼び出す前にロードされていることを確認する必要があると言います。私の電話はページのリンクを押した後です。私はいつも最初にフラッシュアプ​​リケーションを使い、最後にリンクを押すだけです。

3)その後、私はとても以下を追加多分それはセキュリティ上の問題であることを考えた:

try { 
    ExternalInterface.addCallback("test", testing); 
    trace("added callback"); 
} 
catch (error:SecurityError) { 
    trace("Security Error:"+error.message); 
} 
catch (error:Error) { 
    trace("Error:"+error.message); 
} 

しかし、それはプリントアウト「のコールバックを追加しました」:(他

誰もが他に何でし任意のアイデアを持っています私は可能、私は最新のFirefoxとのFlashPlayer 10

よろしくを実行しているのでしょうか?試してください

オッリ

+0

それはおそらくエラーがで産むことを意味し、JavaScriptの問題ではなく、フラッシュものであろうように見えますあなたのJSコード。あなたはFireBugのコンソールを使ったことがありますか?おそらくあなたのコードを投稿しますか? – goliatone

+1

あなたのhtmlを投稿できますか? – weltraumpirat

答えて

2

他の点では、あなたのフラッシュがFirefoxで正常に動作している場合は、関数を呼び出すためのHTMLラッパーまたはJavaScriptコードに問題があると思われます。これらの作品を投稿することはかなり役に立ちます。

しかし、一般的に言えば、IEは<object>タグを使用し、他のすべてのユーザーは<embed>タグを使用します。私は最高のアイデアは、フラッシュ埋め込み、呼び出しを行うためのjQueryを使用することであると思いますが、ここで私はIE、FirefoxとChromeで動作します使用に起こる、単純なHTMLコードです:

<object id="GAMENAME" classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' 
    codebase='http://download.adobe.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0'> 
    <param name="allowScriptAccess" value="always"> 
    <param name="movie" value="game.swf"> 

    <embed id="GAMENAME" name="GAMENAME" src="game.swf" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" 
     allowScriptAccess="always"> 
    </embed> 
</object> 

私がフラッシュにアクセスするためのユーティリティ関数を持っています対象:

function getGame() 
{ 
    if (window.document[gameName]) 
    { 
     return window.document[gameName]; 
    } 
    if (navigator.appName.indexOf('Microsoft Internet') == -1) 
    { 
     if (document.embeds && document.embeds[gameName]) 
     { 
      return document.embeds[gameName]; 
     } 
     else 
     { 
      return document.getElementById(gameName); 
     } 
    } 
} 

はい、それはグローバル変数gameNameは、フラッシュオブジェクトに与えられた名前に設定する必要があります。私たちの場合は、上記のHTMLに対応するには"GAMENAME"でなければなりません。これは私が生産コードとは思わないと言いましたか?

その後、コール私のようなものを使用Flashオブジェクト:完全に賢明であるか、またはそれ以外のベストプラクティスを表すが、それは組み込みフラッシュを見つけるに1が持っている問題を指摘するんではないことがあり、ここで

getGame().test() 

JavaScriptをオブジェクトは<object><embed>と複数のブラウザの存在下にあります。

3

IEではobjectタグを使用し、FFではembedタグを使用する必要があります。まだ他のブラウザではテストされていませんが、埋め込みタグがうまくいけばうまくいきます。

同じ問題を抱えている他の人を助ける。ここで私の作品HTMLページです:)

よろしく、

オッリ

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> 
    <head> 
     <title>test</title> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
     <style type="text/css" media="screen"> 
     html, body { height:100%; background-color: #ffffff;} 
     body { margin:0; padding:0; overflow:hidden; } 
     #flashContent { width:100%; height:100%; } 
     </style> 
    </head> 
    <script> 
     function testIt(){ 
      var flashContainer; 
      if(navigator.appName.indexOf("Microsoft") != -1){ 
        flashContainer = document.getElementById("test"); 
      }else{ 
        flashContainer = document.getElementById("test-embedded"); 
      } 
      flashContainer.test("js says hello"); 
     } 
    </script> 
    <body> 
     <a href="#" onclick="testIt();">Press here</a> 
     <div id="flashContent"> 
      <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" id="test" align="middle" width="550" height="400"> 
       <param name="movie" value="test.swf" /> 
       <param name="quality" value="high" /> 
       <param name="bgcolor" value="#ffffff" /> 
       <param name="play" value="true" /> 
       <param name="loop" value="true" /> 
       <param name="wmode" value="transparent" /> 
       <param name="scale" value="showall" /> 
       <param name="menu" value="true" /> 
       <param name="devicefont" value="false" /> 
       <param name="salign" value="" /> 
       <param name="allowScriptAccess" value="sameDomain" /> 
       <embed src='test.swf' height='400' width='550' id='test-embedded' PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></embed> 
      </object> 
    </body> 
</html> 
関連する問題