0

で実行できる Flash から Javascript 関数を呼び出したいのですExternalInterfaceが、Javascript 関数はコールバックを受け取ります。Flash コールバックを与える方法はありますか?

私は次のようなことを考えました:

ExternalInterface.addCallback("foo", function(){...});
ExternalInterface.call("theFunction", "foo");

しかし、実際にはそうすべきなのに、theFunctionそうしようとするのでうまくいきません。問題は、ページとその Javascript が私の制御下にないことです (ただし、本当に必要な場合は変更を要求できます)。foo()swfObject.foo()

4

2 に答える 2

3

これは、関連する質問セクションの最初の質問と密接に関連しています。

その質問に対する答えと同じように、次のことができます。

ExternalInterface.addCallback("foo", function() { /* ... */ });    // The callback
ExternalInterface.call("theFunction(function() { swfObject.foo(); })");
于 2010-09-28T02:50:16.810 に答える
1

ドキュメントを誤解していると思います。callbackこの例では、呼び出したものへのコールバックではなく、Flash 内の関数への単なる参照です。

基本的に、.call()AS から JS 関数を呼び出すために使用します。.addCallback()そして、名前に基づいてどの AS 関数を呼び出す必要があるかを Flash Player に伝えるために使用します。

あなたの例でtheFunctionは、匿名AS関数を参照する名前である「foo」として1つのパラメーターを取得します。なぜそのような関数を渡したいのかわかりませんが、必要な場合は、JavaScript から次のように呼び出すことができます。

function theFunction(callback) {
    // .. do something...
    swfObject[callback]();
}

JS/HTML 側を制御できない場合は、制御できるかどうかわかりません。とにかく、必要な理由がわからない-JS呼び出しは、同じスレッドで実行されているかのように同期的です。つまり、Flash PlayerはJSコードを実行してからFlash Playerに戻ります...あなたは持っていません実行または何かを待つ。

また、JS/HTML 側に触れずにページを制御する必要がある場合は、JS コード全体を挿入できることを覚えておいてください。単純な関数呼び出しである必要はありません.call関数全体を SWF 内から作成できます。例えば、

var js:XML = <script><![CDATA[
    // Javascript code...
]]></script>;
ExternalInterface.call(js);

または、戻りデータが必要な場合は、コールバックも必要ありません。次のように単純な呼び出しを行うだけです。

// JS
function isNumberZero(__num) {
    return __num == 0;
}

// AS
trace ("Is number zero = " + ExternalInterface.call("isNumberZero", 10));

これがまったく役立つかどうかはわかりません。そうでない場合は、正確に何をしようとしているのかについて、より多くの情報を入手することをお勧めします。

于 2010-09-27T18:53:47.250 に答える