2

私はここにいて、答えを見つけることができません。HTML ページに .swf があり、javascript からその中の関数を呼び出そうとしています。フラッシュから JavaScript に話しかけることはできますが、それを元に戻すことはできません。console.log() を使用してオブジェクトが何をターゲットにしているかを確認しているため、オブジェクトを適切にターゲットにしていることがわかります。

Flash からテストをトリガーし、.swf 内から JavaScript 関数を呼び出し、その関数に内部 Flash 関数を呼び出させます。

フラッシュコード:

//adds callback
ExternalInterface.addCallback("sendToFlash", flashTalkedTo);

//function called by the callback
public function flashTalkedTo():void{
    //runs another function in javascript to log a string
    ExternalInterface.call("callMe")
}

//calls javascript that tries to talk to Flash
ExternalInterface.call("catchFromFlash")

Javascript コード:

//function called by Flash that initiates
function catchFromFlash(){
    talkToFlash()
}

//function that tries to talk to flash
function talkToFlash(){
    document.getElementById('Noodleverse').sendToFlash()
}

//function called by Flash in the end to confirm call made
function callMe(){
    console.log("Call Me")
}

どんな助けでもうまくいきます、ありがとう!

4

1 に答える 1

1

Flash と一般的なプラグインは、少し面倒です。それらは通常の要素のようには動作せず、それらの関数は通常の関数のようには動作しません。たとえば、要素を値に保存して、そこから関数を呼び出すことはできません。objectまた、ブラウザによってが使われているものと が使われているものがあるので注意が必要ですembed

関数を呼び出す最良の方法は、swfobject ( https://code.google.com/p/swfobject/ ) を使用してすべてを抽象化することです。個人的には、私はこれを使用します(経験に基づいて、誰かが改善を提供できるかもしれません):

HTML:

<object id="myplugin" ...>
    ...
    <embed name="myplugin" ... />
</object>

JavaScript:

var o1=document.myplugin;
if(o1&&!!o1.myFlashFunction){
    return document.myplugin.myFlashFunction(); // DO NOT USE o1 here. It will fail.
}
var o2=window.myplugin;
if(o2&&!!o2.myFlashFunction){
    return window.myplugin.myFlashFunction(); // DO NOT USE o2 here
}

最初のケース ( document) は、ほとんどの新しいブラウザ用です。たとえば、Chrome はembedオブジェクトを見つけます。2 番目の ( ) は IE 用で、 (IE、少なくとも古い IE は無視します)windowを検索します。IE も で動作する可能性があるため、2 番目が必要であると 100% 確信しているわけではありません。また、Chrome、FireFox などで一致するすべての要素の配列を提供します (ただし、それらは既に処理されていることを期待しています)objectembeddocumentwindow.myplugin

于 2013-03-29T18:37:43.870 に答える