以下代码非常适合任何Adobe示例,但在Flash 10中运行时,发送连接onStatus
事件会收到“错误”。
此示例中的预期行为是在SWF1上调用listeningConnection.ready
方法。
可以在http://easyxdm.net/beta/tests/flash.html(具有条件逻辑的单个SWF)上看到此演示。
更新 罪魁祸首是Flash的缓存机制,因为我们使用带有条件分支的单个闪存而不是两个单独的swf文件。
任何人都知道在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'");
}
}
答案 0 :(得分:1)
发生这种奇怪错误的原因是两个object-tags的SWF文件引用相同。代码将根据提供的变量进行不同的分支,但是由于两者都使用了相同的路径,Flash9的缓存机制启动并导致错误。
所以,简单的解决方案是在src后面使用?host=true/false
来规避缓存。