Один экземпляр приложения SWF. AS3 - PullRequest
0 голосов
/ 10 августа 2011

Итак, у меня есть несколько SWF-файлов в этом проекте, и мне нужно найти способ обеспечить загрузку только одного экземпляра одного из этих SWF-файлов.

Например, вы не можете открыть 2 разных SWF-приложения в2 разных браузера или вкладки на одном и том же компьютере одновременно.

LocalConnection, похоже, является лучшим решением этой проблемы, однако у нас возникают проблемы с Internet Explorer 9.

private var lc:LocalConnection = new LocalConnection()

try
{
      lc.connect ("Main");
      //continue
}
catch (e:Error)
{
      //swf exists.
}

Кажется, что IE9 определенно не уничтожает SWF мгновенно.При обновлении страницы может отображаться «Swf Exists», а через несколько секунд обновление устраняет проблему.

Кто-нибудь знает, почему это происходит?

В случае сбоя.Кто-нибудь знает, есть ли событие Exit?Например, когда SWF завершается, есть ли способ, которым я могу перехватить это событие и вручную закрыть локальное соединение до завершения?

onApplicationExit(e:Event): void
{
    lc.close();
}

Наконец, у кого-нибудь есть какие-либо другие методы, которые я мог бы использоватьдобиться одного экземпляра SWF?

Ответы [ 3 ]

1 голос
/ 10 августа 2011

вы можете использовать SharedObject для хранения флага независимо от того, открыт ли один SWF или нет. если флаг установлен в true, при запуске закройте второй swf.

и сбросьте флаг, когда первый SWF закрывается. может быть проще в обращении, чем LocalConnection.

редактировать

добавить мои вещи из комментария:

поскольку у разделяемых объектов нет продолжительности жизни, которую вы могли бы установить, возможно, вы могли бы работать с каким-то тайм-аутом: создайте уникальный идентификатор для своего SWF и записывайте идентификатор и временной код каждые 5 секунд в SharedObject. всякий раз, когда SWF открывается, вы сравниваете идентификаторы и проверяете, является ли временной код старше 5-10 секунд. если это так, закройте его, если не перезаписать разделяемый объект. что-то в этом роде ...

0 голосов
/ 11 августа 2011

В каждом загруженном SWF-файле установите статическую переменную при инициализации этого клипа.Затем в основном клипе проверьте, не равна ли эта переменная нулю.Если это так, вы уже загрузили этот SWF-файл и можете игнорировать загрузку.

В качестве дополнительного бонуса, если вы установите значение статической переменной для класса документа загруженного SWF-файла, вы получитетакже есть ссылка на загруженный SWF.

0 голосов
/ 10 августа 2011

Нет прямого способа поймать событие закрытия страницы с помощью flash, но javascript предоставляет вам способ.Я бы попробовал следующее:

Добавьте слушатель javascript window.onbeforeunload на свою веб-страницу и используйте его для вызова функции очистки в вашем флэш-фильме (который немедленно закроет локальное соединение).Чтобы сделать ваш flash-фильм слушающим вызовы javascript, взгляните на ExternalInterface.addCallback.

...