1

タイトルで分かるように、私はAS3 ExternalInterfaceとjQuery/swfobjectに問題があります。jQuery swfobject AS3 ExternalInterfaceが動作しない

if (ExternalInterface.available) { 
    ExternalInterface.call('init'); 
    ExternalInterface.addCallback('testFunc', returnFunc) 
} 

function returnFunc():void { 
    ExternalInterface.call('alertFunc'); 
} 

のjQuery:ActionScriptの

:それはオブジェクトを意味明らかに

function init() { 
    alert('init'); 
    $('#swf_object').testFunc(); 
} 

function alertFunc() { 
    alert('finished'); 
} 

は、ID 'swf_object' 私はまた、次のようでオブジェクトを取得しようとしている

を持っています

document.getElementById('swf_object') 
document.getElementById('swf_object')[0] 
$('#swf_object')[0] 

無駄です。

最初のアラート( 'init')を出していますが、最後のアラートを出していません。私は完全に困惑し、誰かが私の間違いを指摘してくれることを願っています!

答えて

2

問題はあなただけ後に起こる可能なtestFunc(作られている前に、フラッシュtestFunc()を呼び出すJavaScriptのinit()に出て呼んでいるということである(どこかで大規模な明白な1があるようにバインドされています) init()に電話してください)。この問題を解決するには

、単にこれには2つの行入れ替え:JavaScriptでFlashオブジェクトを取得するためとして

ExternalInterface.addCallback('testFunc', returnFunc); // Needs to be available before it's used 
ExternalInterface.call('init'); 

を、あなたはdocument.getElementById('swf_object')と直接それを行うことができますが、それはあまりにもjQueryのを使用可能です:

var swf = $('#swf_object').get(0); // Get the actual object without the jQuery wrapper 
+0

私はそれがそれのような単純なものであることを知っていました!私はActionScriptにはかなり新しくなっていますが、それは驚くほど明白でした!私は、ActionScriptのコードを(JavaScriptのように)読み続けることを期待していましたが、関数(PHPなど)を待つことが判明しました。関数を実行するのを待つことを期待して、JavaScriptを学習していた時とは逆の問題を覚えていました。 –

+1

@Andrew:AS3とJS(ブラウザ内)は、実際には全く同じです。どちらもシングルスレッド環境でホストされているため、非同期関数を頻繁に使用します。しかし、あなたが関数を呼び出すたびに、それは同期演算です(両方とも(そして私が考えることができるすべての)言語で)。これら2つのコンセプトを調和させるための秘訣は、非同期操作*を開始する関数がsynchronoulsy *を実行するということです。単純に一度に(最初のビットだけで)操作全体を行わないだけです。 – Cameron

関連する問題