[转]ExternalInterface与页面交互的两个Bug总结
http://flashteam.tencent.com/post/268/externalinterface%E4%B8%8E%E9%A1%B5%E9%9D%A2%E4%BA%A4%E4%BA%92%E7%9A%84%E4%B8%A4%E4%B8%AAbug%E6%80%BB%E7%BB%93/
最近在工作中发现ExternalInterface与页面通信的两个问题,造成了很大的困扰,特此总结。
1,无法通过ExternalInterface.call传递“\”反斜杠。
常见情况:
对于文本框之类的UGC(User Generate Content),当UGC中出现了“\”反斜杠,通过ExternalInterface.call作为参数传递到页面上时,会引发__flashToXml__这类flash注册到页面上的JS函数报错。
原因:
ExternalInterface只是简单的把参数加上了“”双引号就传递给了页面,当出现了“\”反斜杠时,就会引发转义,造成页面错误
解决方法:
将“\”转编为“\\”
或者直接使用现成的代码:
private static function EscapeMessage(message:*):* {if (message is String) {message = EscapeString(message);}else if (message is Array) {message = EscapeArray(message);}else if (message is Object) {message = EscapeObject(message);}return message;}private static function EscapeString(message:String):String {var replacePattern:RegExp = /\\/g; //new RegExp("/\\/", "g");return message.replace(replacePattern, "\\\");}private static function EscapeArray(message_array:Array):Array {var length:uint = message_array.length;var i:uint = 0;for (i; i < length; i++) {message_array[i] = EscapeMessage(message_array[i]);}return message_array;}private static function EscapeObject(message_obj:Object):Object {for (var name:String in message_obj) {message_obj[name] = EscapeMessage(message_obj[name]);}return message_obj;}