Сбой Flash Player 10.1 при доступе к общему объекту - PullRequest
1 голос
/ 14 июня 2010

с момента обновления моего плагина Flash Player с 10 до 10.1 я вижу странный сбой при доступе к общим объектам. Отладчик Flex Builder выскакивает и печатает трассировку стека следующим образом:

undefined

 at flash.net::SharedObject$/getLocal()
 at my.code::MyClass$/load()[/my/path/to/my/MyClass.as:27]
    (...)

Это происходит при вызове SharedObject.getLocal("someString") во второй раз для той же строки, хотя это не всегда приводит к сбою. При использовании другого браузера на том же компьютере (не настроенного в качестве предпочтительного браузера отладки во Flex Builder) Flash Player остается без звука. Код обернут в блок try/catch(Error), который не улавливает эту ошибку. Я использую Flex SDK 3.5 и Flex Builder 3 в Mac OS X 10.6.3. Кто-нибудь еще видел это?

Спасибо, Саймон

Ответы [ 4 ]

4 голосов
/ 14 августа 2010

Я не получаю никаких ошибок, кажется, что flash просто запускает бесконечный цикл и вылетает из браузера. Прекрасно работает в Safari, но не в Firefox 3.6.8.

Я исправил это, выполнив следующее:

var mySO:SharedObject = SharedObject.getLocal("mySO");
mySO.flush();      // Fixes Firefox shared object bug

По-моему, он пытается постоянно загружать общий объект, который не существует.

3 голосов
/ 24 июня 2010

Вот как работает:

    package scolab.core
{
    import flash.net.SharedObject;

    /**
     * Flash 10.1 introduce a nasty bug that crash the FlashPlayer and the browser when a SharedObject is accessed consecutively
     * We work around this issue with a static accessor that make sure the SharedObject is accessed only once and kept in cache.
     * */
    public class SharedObjectManager
    { 
        private static var cache:Object = new Object()
        public static function getLocal(name:String, localPath:String = null, secure:Boolean = false):SharedObject {
            if (cache.hasOwnProperty(name+":"+localPath+":"+secure)) {
                return cache[name+":"+localPath+":"+secure]
            } else {
                cache[name+":"+localPath+":"+secure] = SharedObject.getLocal(name,localPath,secure)
            }
            return cache[name+":"+localPath+":"+secure]
        }
    }
}
1 голос
/ 28 февраля 2012

У меня та же проблема, и я выяснил, что основной причиной этого является многократный LSO с тем же именем.Просто убедитесь, что у вас есть только один экземпляр SharedObject с конкретным именем.

public class LsoManager
{
   private static var _collection:Dictionary = new Dictionary();
   private static const LSO_LOCAL_PATH:String  = "/";
   private static const LSO_USE_SECURE:Boolean = false;

   public function LsoManager() 
   {}

   public static function get(key:String):SharedObject
   {
        if (!_collection.hasOwnProperty(key)) {
            _collection[key] = SharedObject.getLocal(key, LSO_LOCAL_PATH, LSO_USE_SECURE);
        }
        return _collection[key];
   }

}
1 голос
/ 29 июня 2010

Я тоже был сожжен этой проблемой при обновлении до FlashPlayer 10.1.На моей машине (Mac OS 10.6.4, Firefox 3.6.6, Flash Builder 4, Flex 3.2) трассировка стека не поступала ... браузер просто зависает.

Мне удалось обойти эту проблемуубедившись, что я вызывал SharedObject::flush() каждый раз, когда я изменял свойство объекта SharedObject.data:

var so:SharedObject = SharedObject.getLocal("blah");

so.data.something = "abcdef";

// not so.data.flush() - there is no such method
so.flush();    // this fixed my problem on FlashPlayer 10.1

я вижу вышеупомянутый комментатор, который упоминал, что это был сам вызов flush,висел, так что YMMV.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...