Обеспечение только одного открытия SWF? - PullRequest
2 голосов
/ 04 июня 2009

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

Как я могу это сделать?

До сих пор я думал о двух возможных решениях:

1) Использование общего объекта Flash - но, поскольку срок его действия не истекает, если пользователь закрывает окно браузера, не вызывая мою функцию выхода, чтобы удалить его, оставшийся объект будет мешать другим новым сеансам. (Возможно, случайное число и метка времени для идентификации экземпляра?)

2) Использование localconnection - немного странно, это зависит от того, swf обнаруживает, используется ли объект Localconnection и не загружается, если это так. Но кажется, что локальные соединения выходят из строя при малейшей провокации, поэтому я немного опасаюсь их использовать.

Ответы [ 3 ]

2 голосов
/ 29 августа 2010

Я считаю, что у LocalConnection есть одно преимущество по сравнению с решением SharedObject - оно допускает имена LocalConnection глобальной области, хотя локальные SharedObjects всегда хранятся для каждого домена, насколько я знаю.

Что касается SharedObject, единственный вариант - регулярно обновлять временную метку и проверять ее каждый раз при запуске .swf.

Так что я бы выбрал простое решение на основе LocalConnection, потому что оно довольно простое, и у меня никогда не было проблем с LocalConnection.

public class LCTest extends Sprite
{
    public function LCTest()
    {
        var lc:LocalConnection = new LocalConnection();
        lc.allowDomain("*");
        try
        {
            lc.connect("_myLCLock"); // underscore for global scope
            trace('not running, can init');
        }
        catch (e:ArgumentError)
        {
            trace('already running');
        }
    }
}
1 голос
/ 04 июня 2009

Если SWF доступен только из одного места, я думаю, что Shared Objects - безопасная ставка. Я не думаю, что нужно беспокоиться о сложном сеансе, должно быть событие завершения работы, которое вы можете отследить, даже когда браузер закрыт вручную. (Даже если этого не произойдет, я на 99% уверен, что SO отключаются при выключении, несмотря ни на что, поэтому возможен некоторый обходной путь.)

Однако общие объекты неразрывно связаны с расположением SWF-файла, поэтому пользователь может обойти вышеупомянутый метод, просмотрев вторую копию SWF-файла, сохраненную локально, или загруженную на другой веб-сервер или что-либо еще. Если это беспокоит, и если SWF все еще будет работать в такой ситуации, то я думаю, что LocalConnection - ваш единственный выбор. Но я никогда не считал, что ЛК очень надежен. Я не знаю, можно ли это сделать пуленепробиваемым, но я думаю, что это единственный другой вариант.

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

Обратите внимание, есть ошибка с LocalConnection http://k2xl.com/wordpress/2011/04/30/localconnection-bug-in-flash-player/

...