2

私は JavaScript と ActionScript の両方に非常に慣れていません。JavaScript で ActionScript の関数を呼び出し、返された配列を格納しようとしています。私はどこでも助けを求めましたが、これを機能させることはできません。私のアクションスクリプトは以下の通りです:

import flash.display.Sprite;
import flash.text.Font;
import flash.text.FontType;
import flash.text.FontStyle;
import flash.external.*;

public class FontList extends Sprite
{

    public function FontList()
    {
        ExternalInterface.call('populateFontsList', getDeviceFonts());
        ExternalInterface.addCallback('getFonts', getDeviceFonts);
    }

機能する getDeviceFonts() メソッドがあり、.call 関数も機能し、javascript 内で関数を呼び出します。ただし、javascript で getFonts メソッドを呼び出そうとすると、うまくいきません。Relavent Javascript は次のとおりです。

function getFlashMovie(movieName) {
  var isIE = navigator.appName.indexOf("Microsoft") != -1;
  return (isIE) ? window[movieName] : document[movieName];
}

var fontArray = getFlashMovie("FontList.swf").getFonts();

ここで何か不足していますか?

4

1 に答える 1

3

Actionscript 関数getDeviceFonts()が配列を返す場合、コードはそのまま機能しfontArray、JavaScript の には同じ値が含まれます。

ただし、swf ファイルがロードされて準備が整うまで ActionScript 関数を呼び出すことはできないことに注意してください。たとえば、var fontArray = getFlashMovie("FontList.swf").getFonts();swf がまだロードされていないため、ページのロードを直接実行することはできません。 、したがって getFonts() はまだ定義されていません。

しかし、配列を引数として取るExternalInterface.call('populateFontsList', getDeviceFonts());JavaScript 関数があれば、うまくいくはずです。populateFontsListこの JavaScript 関数は、swf がロードされて ActionScript が実行されるとすぐに呼び出される必要があります。

于 2011-12-17T14:16:10.867 に答える