Как определить, был ли встроенный SWF создан с помощью Flex или Flash в JavaScript - PullRequest
0 голосов
/ 15 апреля 2011

Есть ли способ (в javascript) определить, был ли встроенный .swf создан с помощью Flash Professional или Flex.

У нас есть страница с несколькими вкладками, каждая из которых может содержать .swf.Все вкладки определены в одном и том же HTML-файле, и инфраструктура javascript вызывает .rewind () и .play () на swf, когда содержащая вкладка становится активной.

Это прекрасно работает на обычной флэш-анимации, убедившись, что они начинают играть с самого начала, когда открыта вкладка.Однако для SWF, созданного с помощью Flex, перемотка и воспроизведение наносят ущерб инфраструктуре Flex, и приложение не загружается.

Лучший способ обнаружить Flex - подсчитать количествокадры .swf имеет.Для flex это всегда 2. Но это звучит не лучшим образом.

Мы также попытались добавить метод обратного вызова с помощью ExternalInterface в приложении Flex preinitialize событие.К сожалению, это событие вызывается довольно поздно при запуске приложения, и код javasctipt проверяет обратный вызов, прежде чем код Flex добавит его.

Есть ли другой способ определить (из javascript), был ли файл .swf создан с использованиемFlex

Ответы [ 2 ]

1 голос
/ 15 апреля 2011

Краткий ответ, нет. Flex IS Flash; это просто дополнительный слой поверх Flash для повышения производительности в разработке.

Однако, возможно, для вас найдется решение, но мне нужно знать, создали ли вы сами swfs и можете ли вы их изменить. Если бы вы могли, я бы использовал обратный вызов ExternalInterface , чтобы «воспроизвести» ваш swf, вызвав эту функцию в JS (т. Е. document.getDocumentById('swfId').someFunction();).

Другое решение состояло бы в том, чтобы все ваши SWF-файлы воспроизводились сразу после загрузки, а затем загружались в JS только при необходимости (без предварительной загрузки). Если вам нужно «перемотать», просто перезагрузите их снова (это должно быть достаточно просто, если вы используете SWFObject , просто удалите и добавьте обратно).

0 голосов
/ 17 апреля 2011

Хорошо, поэтому, чтобы ответить на мой собственный вопрос, DownloadProgressBar (загруженный в первом кадре) может быть настроен (перегружен).

Итак, это пользовательский индикатор выполнения, которыйдобавляет метод обратного вызова isFlex () в Javascript:

package flexidentifier {
    import flash.external.ExternalInterface;
    import mx.preloaders.DownloadProgressBar;

    public class FlexIdentifierDownloadProgressBar extends DownloadProgressBar {
        public function FlexIdentifierDownloadProgressBar() {
            super();
            ExternalInterface.addCallback("isFlex", callback);
        }

        protected function callback():String {
        return "true";
        }
    }
}

Не забудьте добавить его в приложение:

<s:Application xmlns:s="library://ns.adobe.com/flex/spark" preloader="flexidentifier.FlexIdentifierDownloadProgressBar">
</s:Application>

Было бы неплохо, если бы люди из Adobe добавилидля начала в рамках Flex.

...