Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.01.2012, 12:01
Новичок на форуме
Отправить личное сообщение для haspadar Посмотреть профиль Найти все сообщения от haspadar
 
Регистрация: 25.08.2010
Сообщений: 3

ExternalInterface в Chrome
Привет.
Столкнулся со следующей проблемой. Мне надо с JS сохранять данные в
LSO. Но проблема в том, что в Chrome (14.0.835.202 Ubuntu 11.04) код
отказывается работать, ругаясь на несуществующий setter-метод.
Элемент, который содержит swf, генерируется динамически. Но если
захардкожен и внутри есть "<a href="http://www.adobe.com/go/
getflashplayer"><img src="http://www.adobe.com/images/shared/
download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /
></a>", то setter вызывается отлично и из-под Chrome. Кстати, в этом

варианте на что бы я не менял ссылку на этот gif, Chrome отказывается
работать снова - только родной gif и только с сайта Adobe. Полная
магия.
Итак, вот код:
HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
        "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
    <title>LSO Test</title> 
</head> 
<body> 
    <div style="display:none;"> 
        <script type="text/javascript" src="/swfobject/swfobject.js"></ 
script> 
        <script type="text/javascript"> 
                div = document.createElement('div'); 
                div.setAttribute("id", 'lso_el'); 
                document.body.appendChild(div); 
                swfobject.embedSWF("http://lso.dev/lso.swf", "lso_el", 
"0", "0", "9.0.0"); 
                swfobject.addLoadEvent(function () { 
swfobject.getObjectById('lso_el').setLSOValue('Works!'); 
alert(swfobject.getObjectById('lso_el').getLSOValue()); 
                }); 
        </script> 
    </div> 
     <!--<div id="lso_el">--> 
         <!--<h1>Alternative content</h1>--> 
         <!--<p><a href="http://www.adobe.com/go/getflashplayer"><img 
src="http://www.adobe.com/images/shared/download_buttons/ 
get_flash_player.gif" alt="Get Adobe Flash player" /></a></p>--> 
     <!--</div>--> 
</body> 
</html>

AS:
package { 
        import flash.display.Sprite; 
        import flash.external.ExternalInterface; 
        import flash.net.SharedObject; 
        public class Lso extends Sprite { 
                public function Lso() { 
                        if (ExternalInterface.available) { 
                                try { 
                                        ExternalInterface.addCallback("getLSOValue", getLSOValue); 
                                        ExternalInterface.addCallback("setLSOValue", setLSOValue); 
                                } catch (error:Error) {} 
                        } 
                } 
                private function getLSOValue():* 
                { 
                        try { 
                                var value:*; 
                                var lso:* = SharedObject.getLocal("Lso_uid"); 
                                if (lso.data.value != null) { 
                                        value = lso.data.value; 
                                } 
                                if (ExternalInterface.available) { 
                                        return value; 
                                } 
                        } 
                        catch(e) {} 
                } 
                private function setLSOValue(value):void 
                { 
                        try{ 
                                var writeSuccess:Boolean = false; 
                                var lso = SharedObject.getLocal("Lso_uid"); 
                                lso.data.value = value; 
                                var success = lso.flush(); 
                                if (success == "pending") { 
                                        lso.onStatus = function(result) { 
                                                if (result.code == "SharedObject.Flush.Success") { 
                                                        writeSuccess = true; 
                                                } else { 
                                                        writeSuccess = false; 
                                                } 
                                        }; 
                                } else { 
                                        writeSuccess = success; 
                                } 
                        } 
                        catch(e) {} 
                } 
        } 
}

Скомпилированная флэшка доступна отсюда http://ubuntuone.com/2uD2oqN6ermnI03995ILNX

Магия проявляется только под Chrome/Chromium.
Подскажите, как решить проблему.
Второй день голову ломаю.

Спасибо.

Последний раз редактировалось haspadar, 11.07.2012 в 03:33.
Ответить с цитированием
  #2 (permalink)  
Старый 24.01.2012, 05:36
Аватар для NoResponse
Профессор
Отправить личное сообщение для NoResponse Посмотреть профиль Найти все сообщения от NoResponse
 
Регистрация: 17.06.2010
Сообщений: 152

Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
UI: draggable+resizable + Chrome ddvhouse jQuery 3 15.09.2011 15:28
Получить размеры рабочей области окна в Chrome unclechu Events/DOM/Window 1 13.09.2011 02:37
google chrome frame js_chrome Opera, Safari и др. 0 03.09.2011 14:48
тег <audio> в Opera, Chrome, Firefox Magneto Javascript под браузер 12 25.11.2010 15:12
Google Chrome перерисовка страницы во время выполнения скрипта Dekart Javascript под браузер 0 08.06.2010 08:35