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 方法时,它不起作用。相关的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()返回一个数组,那么您的代码应该可以正常工作,并且fontArrayJavaScript 中的 将包含相同的值。

但是要记住的一件事是,在加载并准备好 swf 文件之前,您不能调用 ActionScript 函数,例如,您不能var fontArray = getFlashMovie("FontList.swf").getFonts();直接在页面加载时执行操作,因为 swf 还不会加载,因此 getFonts() 将不会被定义。

但我想ExternalInterface.call('populateFontsList', getDeviceFonts());应该可以,如果你有一个populateFontsList以数组作为参数的 JavaScript 函数。加载 swf 并执行 ActionScript 后,应立即调用该 JavaScript 函数。

于 2011-12-17T14:16:10.867 回答