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. Подскажите, как решить проблему. Второй день голову ломаю. Спасибо. |
Пожалуйста, отформатируйте свой код!
Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [js] ... ваш код... [/js] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
Часовой пояс GMT +3, время: 07:37. |