当我使用类似字符串的JSON传递参数时,为什么ExternalInterface会中断?
我对Flash 10和ExternalInterface有一个非常奇怪的问题。我目前正在使用自制网桥使用带有Javascript的RTMFP,每当我尝试传递包含JSON的数据时,我都会收到来自Flash的奇怪的Javascript错误:
missing ) after argument list
try { __flash__toXML(Flash.Utilities.A..."")) ; } catch (e) { "<undefined/>"; }
由于这来自Flash并且它不受任何Javascript文件的约束,因此无法获得更多信息。
要重现此问题,您可以使用此脚本:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.external.ExternalInterface;
public class Main extends Sprite
{
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
var test:String;
test = ""\""";
ExternalInterface.call("console.log", test);
}
}
}
我该怎么做才能避免这个问题,这是一个众所周知的问题吗?
没有找到相关结果
已邀请:
2 个回复
掸牛浓疗
和
,这可能导致从Flash转移到javascript期间的javascript错误或数据损坏。 将数据从Flash传输到JS时,Flash尝试执行的操作是执行以下操作:
问题在于它会使您的数据处于原始状态,并且根本不会逃避反斜杠。如果你的字符串只包含
而你想在其上调用
,它将尝试执行以下操作:
正如您所看到的,这是无效的javascript。它将在您的Javascript控制台中引发错误,它永远不会调用
。 解决方案是要么使用闪存行为,要么做一些讨厌的黑客攻击它。 为了消除闪光车的故障,您可以在转移它们之前逃避黑色闪光。这个解决方案现在可以使用了,但是当Flash修复它时(很可能不会在不久的将来,如果你认为这个bug已经超过4年了),它将破坏你的应用程序。 另一种可能性是对Flash不能很好处理的字符(
,
,
)进行url编码,并在另一侧对它们进行解码。 Flash:
Javascript:
这很难看,但它确实有效。
漂汀拦
和
应该可以正常工作: AS3:
然后在Javascript中: