Как подписаться на форму события JavaScript, код сценария действия Flex 3? - PullRequest
0 голосов
/ 14 марта 2009

У нас есть это приложение Flex, говорящее с сервером. Нам нужно какое-то FlexEvent.ON_BROWSER_WINDOW_CLOSE событие, но, к сожалению, Flex не предоставляет такого.

Итак, у меня есть совет перехватить событие javascript "onbeforeunload" и вызвать флэш-клиент через зарегистрированный метод ExternalInterface.

Есть ли способ подписаться на событие javascript без кода javascript?

Обновление Я хочу сделать это, чтобы умножать флеш-приложения на хостинг. Конечно, мы можем управлять этим с помощью внешнего файла javascript, но пока неясно ...

Ответы [ 3 ]

2 голосов
/ 31 марта 2009

Вы можете скомпилировать js-код для вставки в SWF-файл:

package
{

import flash.display.Sprite;
import flash.external.ExternalInterface;
import flash.net.SharedObject;


public class CloseTest extends Sprite
{
    private var so:SharedObject = SharedObject.getLocal("hello");

    public function CloseTest()
    {
        if (ExternalInterface.available)
        {
            ExternalInterface.addCallback("onclose", onClose);
            ExternalInterface.call(this.javascript);
        }

        this.so.data.count ||= 0;

        trace(so.data.count);
    }

    private function onClose ():void
    {
        this.so.data.count++;
        this.so.flush();
        this.so.close();
    }

    private var javascript:XML = <javascript><![CDATA[function ()
    {
        window.onbeforeunload = function ()
        {
            alert("hello");
            document.getElementById("CloseTest").onclose();
        }

    }]]></javascript>;
}

}
2 голосов
/ 14 марта 2009

Вы можете использовать ExternalInterface для вызова функций Javascript, определенных в контейнере. Смотрите это .

Этот пост описывает ситуацию, аналогичную вашей. Взгляни.

0 голосов
/ 15 марта 2009

Извините, нет способа сделать то, что вы ищете, без использования Javascript и ExternalInterface.

...