ExternalInterface в Chrome

50 views
Skip to first unread message

Steve Reich

unread,
Jan 23, 2012, 2:43:55 AM1/23/12
to Russian Adobe Flash Platform User Group
Привет.

Столкнулся со следующей проблемой. Мне надо с 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) {}
}
}
}

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

Спасибо.
Reply all
Reply to author
Forward
0 new messages