2009-05-12 11 views
1

FirefoxでExternalInterfaceを動作させるのに苦労しています。私はJavaScriptからAS3関数を呼び出そうとしています。 SWFは正しいコールバックでセットアップされ、IEで動作しています。FirefoxでのFlash外部インターフェイスの問題

私はAC_RunActiveContent.jsを使用してswfを自分のページに埋め込みます。しかし、オブジェクト/埋め込みタグにIDを追加するように変更しました。以下はIEとFirefox用に生成されるobjectタグとembedタグです。

<object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="400" height="400" align="middle" id="jpeg_encoder2" name="jpeg_encoder3" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" > 
    <param name="movie" value="/jpeg_encoder/jpeg_encoder3.swf" /> 
    <param name="quality" value="high" /> 
    <param name="play" value="true" /> 
    <param name="loop" value="true" /> 
    <param name="scale" value="showall" /> 
    <param name="wmode" value="window" /> 
    <param name="devicefont" value="false" /> 
    <param name="bgcolor" value="#ffffff" /> 
    <param name="menu" value="false" /> 
    <param name="allowFullScreen" value="false" /> 
    <param name="allowScriptAccess" value="always" /> 
</object> 


<embed 
    width="400" 
    height="400" 
    src="/jpeg_encoder/jpeg_encoder3.swf" 
    quality="high" 
    pluginspage="http://www.macromedia.com/go/getflashplayer" 
    align="middle" 
    play="true" 
    loop="true" 
    scale="showall" 
    wmode="window" 
    devicefont="false" 
    id="jpeg_encoder2" 
    bgcolor="#ffffff" 
    name="jpeg_encoder3" 
    menu="false" 
    allowFullScreen="false" 
    allowScriptAccess="always" 
    type="application/x-shockwave-flash" > 
</embed> 

私は、Firefoxで

<script> 
try { 
    document.getElementById('jpeg_encoder2').processImage(z); 
} catch (e) { alert(e.message); } 
</script> 

...このように関数を呼び出しています、私はすべてのアイデア "document.getElementById("jpeg_encoder2").processImage is not a function"

を言ってエラーが出ますか?

+0

をたぶん、あなたはすぐにprocessImage関数を呼び出しています。 SWFファイルがロードされていることを確認します。 OBJECT/EMBED要素をドキュメントツリーに挿入した後、ブラウザはSWFファイルを要求する時間が必要です。そうでない場合は、さらにコードを入力してください。 – Rafael

+0

関数はonLoadと呼ばれることはありません...後でユーザーのやり取りに基づいて発生します。私はすべてが完全にロードされたことを確認しましたが、同じ問題がまだあります。 – majestiq

+0

SWFファイルでコード(EMBEDタグ)をテストしただけです。それはうまくいった。 FirefoxとIEのFlash Playerのバージョンを確認してください。 getElementByIdが正しい要素を返すかどうかを確認します。この問題を引き起こす可能性のある他のアイデアはありません。 – Rafael

答えて

0

オブジェクト埋め込みタグの両方で同じIDを使用してみてください。私は1つのブラウザが1つのタグと別のブラウザを使用していることを覚えています...どちらがどちらであるかわかりません。私はしばらく前に同じ問題を抱えていました。

フラッシュが付属しているExample Codeを修正して周りにいます。それが動作することを確認し、それを取り除き、私の使用のためにそれを適応させる。例えば、通知に

オブジェクトタグ「ExternalInterfaceExample」にID設定すること、次いでタグが同様に「ExternalInterfaceExample」に設定パラメータを有する埋め込みます。私はそれがあなたの手掛かりかもしれないと思います。

幸運を祈る!

0

あなたがそれらを呼び出す試す前に、あなたのswfファイルの表示(ページ上)はありますか?ない場合は、これを読んで:swf-not-initializing-until-visible

0

は、これら二つのもの試してみてください。

まず、次のようにJavaScriptから関数を呼び出してみてください。

var swf; 
if(navigator.appName.indexOf("Microsoft") != -1) { 
    swf = window["jpeg_encoder2"]; 
} else { 
    swf = document["jpeg_encoder2"]; 
} 
if(typeof(swf) == "undefined") swf = document.getElementById("jpeg_encoder2"); 

swf.processImage(z); 

第二に、私は思えるのExternalInterfaceはFirefoxで呼び出すことがわかってきましたオブジェクトタグではなく埋め込みタグでのみ動作します。埋め込みタグを使用していればうまく動作するかどうかを確認してください。 (今、あなたが投稿したHTML/Javascriptコンボがオブジェクトまたは埋め込み要素にアクセスするかどうかはわかりません)

1

以下は、Flashムービーがhtmlページ内に配置される方法の例です。この映画は非常にシンプルなムービーで、最初はストップアクションが施されています。ムービーは、以下のTest Runs subjectの下に表示されます。この特定のhtmlコードは、FlashMXのPublishコマンドによって自動生成されました。 Flashムービーファイルはsimplemovie.swfであることに注意してください。ムービーのファイル名(.swf拡張子を引いたもの)に一致するようにFlashによって自動的にidとnameが割り当てられています。実際には、名前とIDは、同じページの他の要素で使用されていない限り、何でもかまいません(ただし、拡張名は使用しません。特に、数字で始まらないでください)。

`codebase="http://download.macromedia.com/pub/shockwave/cabs/flash`/swflash.cab#version=6,0,0,0" 'WIDTH = "150" HEIGHT = "75" ID = "simplemovie" ALIGN = ""> ` quality=medium `swliveconnect = "" 真 ` BGCOLOR =#FFFFFF WIDTH = "150" HEIGHT = "75" `name ="シンプルモビ " ` ALIGN = "" "TYPE =" application/x-shockwave-flash " ` PLUGINSPAGE = "http://www.macromedia.com/go/getflashplayer ">

次の関数の意志がその関数を呼び出すフラッシュファイル内の再生機能があります:

 
function testEval(stringToEval) 
{ 
    var movie=eval(stringToEval); 
    if (movie) 
    { 
    if (movie.PercentLoaded()) 
    { 
     if (movie.PercentLoaded()==100) 
     { 
     movie.Play(); 
     } 
     else 
     { 
     alert("movie is still loading, try again soon"); 
     } 
    } 
    else 
    { 
     alert("movie object found-but unable to send command"); 
    } 
    } 
    else 
    { 
    alert("movie object not found"); 
    } 
} 
1

このpostを参照してください。

function thisMovie(movieName) { 
    if(navigator.appName.indexOf("Microsoft") != -1) { 
    return window[movieName]; 
    } else { 
    return document[movieName]; 
    } 
}; 

、ドキュメントがロードされるまで、この関数を呼び出すことがないことを確認してください。

あなたはより多くのこのようなJS関数は(というよりもgetElemById)Flashオブジェクトを取得します。

0

swfobjectを使用してフラッシュムービーを埋め込むためにAC_RunActiveContent.jsを使用するのではなく、簡単に組み込みを行うことができます。

<head> 
<script type="text/javascript" src="swfobject.js"></script> 

<script type="text/javascript"> 
try { 
     swfobject.getObjectById('jpeg_encoder2').processImage(z); 
     } catch (e) { alert(e.message); } 
</script> 
</head> 

あなたがswfObjectを使用していない場合は、あなただけコピーしてを貼り付けることができ、ストレート、あなたのコードにしてをswfobject.getObjectById:

<script type="text/javascript"> 

function getObjectById(objectIdStr) { 
     var r = null; 
     var o = getElementById(objectIdStr); 
     if (o && o.nodeName == "OBJECT") { 
      if (typeof o.SetVariable != UNDEF) { 
       r = o; 
      } 
      else { 
       var n = o.getElementsByTagName(OBJECT)[0]; 
       if (n) { 
        r = n; 
       } 
      } 
     } 
     return r; 

getObjectById('jpeg_encoder2').processImage(z); //call your method 
</script> 
関連する問題