次のコードは、Adobeの例からはかなり単純ですが、Flash 10では正常に機能しますが、Flash 9で実行すると、接続の送信onStatus
イベントは「エラー」を受け取ります。
この例で予想される動作は、listeningConnection.ready
メソッドがSWF1で呼び出されることです。
このデモはhttp://easyxdm.net/beta/tests/flash.html(条件付きロジックを備えた単一のSWF)で見ることができます。
更新 2つの個別のswfファイルではなく、条件付き分岐を備えた単一のフラッシュを使用していたため、原因はFlashのキャッシュメカニズムでした。
制限が解除されたか、Flash 10でこれに関連するバグが修正されたかどうかを知っている人はいますか?
SWF1
public static function main(swfRoot:MovieClip):Void
{
var channelName = "_channel";
var listeningConnection:LocalConnection = new LocalConnection();
listeningConnection.ready = function() {
ExternalInterface.call("console.log", "ready");
};
listeningConnection.allowDomain = function(domain) {
return true;
};
if (listeningConnection.connect(channelName)) {
ExternalInterface.call("console.log","listening on " + receivingChannelName);
} else {
ExternalInterface.call("console.log","could not listen on " + receivingChannelName);
}
}
SWF2
public static function main(swfRoot:MovieClip):Void
{
var channelName = "_channel";
var sendingConnection:LocalConnection = new LocalConnection();
sendingConnection.onStatus = function(infoObject:Object) {
switch (infoObject.level) {
case 'status' :
ExternalInterface.call("console.log", "LocalConnection connected successfully.");
break;
case 'error' :
ExternalInterface.call("console.log", "LocalConnection encountered an error.");
break;
}
};
if (sendingConnection.send(channelName, "ready")) {
ExternalInterface.call("console.log", "called 'ready'");
}else{
ExternalInterface.call("console.log", "error calling 'ready'");
}
}