我对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();
我错过了什么吗?
如果Actionscript函数getDeviceFonts()
返回一个数组,你的代码应该像它一样工作,并且JavaScript中的fontArray
将包含相同的值。
要记住的一件事是,你不能调用ActionScript函数,直到它的swf文件被加载和准备好,所以,例如,你不能做var fontArray = getFlashMovie("FontList.swf").getFonts();
直接在页面加载,因为swf还不会被加载,因此getFonts()将不会被定义。
但我猜ExternalInterface.call('populateFontsList', getDeviceFonts());
应该工作,如果你有一个JavaScript函数populateFontsList
,以数组为参数。该JavaScript函数应该在加载swf和执行ActionScript后立即调用。