вторник, 30 октября 2012 г.

navigateToURL в цикле (Action Script)

Преамбула:
Возникла необходимость последовательно открывать в браузере несколько ссылок на ресурсы.

Проблема:
При последовательном или в цикле вызове функции navigateToURL отрабатывает всего лишь один вызов.

Решение:
  1. Приложение работает в standalone flashplayer-е или в среде flash-плагина браузера:
    const URLS:Array = ["http://ya.ru", "http://r0.ru"];
    stage.addEventListener(Event.ENTER_FRAME, function (e:Event):void {
        navigateToURL(new URLRequest(URLS.shift()), "_blank");
        if (URLS.length == 0) {
            e.target.removeEventListener(e.type, arguments.callee);
        }
    });
    
    Прим.: В качестве источника события Event.ENTER_FRAME можно использовать любой экземпляр класса Sprite или его наследников в независимости добавлен ли этот экземпляр в список отображения или нет.
  2. Приложение работает в среде flash-плагина браузера, доступен и разрешен вызов javascript-методов, то можно обойтись без подписки на событие Event.ENTER_FRAME:
    const URLS:Array = ["http://ya.ru", "http://r0.ru"];
    if (ExternalInterface.available) {
        for each (var url:String in URLS) {
            ExternalInterface.call("window.open", url);
        }
    }
    

Комментариев нет:

Отправить комментарий