Как получить эту функцию в ActionScript для возврата массива в JavaScript с помощью ExternalInterface

Я очень плохо знаком с JavaScript и ActionScript. Я пытаюсь получить JavaScript для вызова функции в ActionScript и сохранить возвращенный массив. Я везде искал помощи, и я не могу заставить ее работать. Мой 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. Тем не менее, когда я пытаюсь вызвать метод getFonts в JavaScript, это не работает. Релавент Javascript, как показано ниже:

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

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

Я что-то здесь упускаю?

1 ответ

Решение

Если функция Actionscript getDeviceFonts() возвращает массив, ваш код должен работать как есть, а fontArray в JavaScript будет содержать те же значения.

Однако следует иметь в виду, что вы не можете вызывать функцию ActionScript до тех пор, пока файл swf не будет загружен и готов, поэтому, например, вы не можете сделать var fontArray = getFlashMovie("FontList.swf").getFonts(); непосредственно при загрузке страницы, поскольку swf еще не будет загружен, и, следовательно, getFonts() еще не будет определен.

Но я думаю ExternalInterface.call('populateFontsList', getDeviceFonts()); должно работать, если у вас есть функция JavaScript populateFontsList который принимает массив в качестве аргумента. Эта функция JavaScript должна вызываться, как только SWF-файл загружен и ActionScript выполнен.

Другие вопросы по тегам