`

[转]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;
}



2,当flash初始化较重时,在非IE内核的IE浏览器下,会造成ExternalInterface.addCallBack绑定不成功的情况出现。
解决办法:
通过页面检测!!flashObj.fucntion是否存在,不存在则由JS重新在页面上生成对应的通信函数(具体可参考youyee写的ExternalInterface 与 JavaScript)
另:在TT和QQ5浏览器下,缓存的SWF会出现页面无法向AS端传递数据的情况出现(无论是addCallBack或JavaScript的return值)
解决方法:
使用innerHTML插入src为空的flash的object标签,再使用setTimeout设置object的movie或data值。
另2:Firefox下,某些情况下,有flash加载2~3次,并且是静默替换(不触发flash内部函数)的情况出现,会导致第一次初始化的数据消失。
出现原因不明。
暂时解决方法:
数据请求由flash端发起,循环不断请求。不要由JavaScript直接设置数据。
分享到:
评论

相关推荐

    delphi通过ExternalInterface与flash交互

    ExternalInterface在我看来就是flash为了外部程序的调用所声明的接口。看到论坛里有好多人问但是回答的就不是很多,就把自己做的一个简单的例子放上来.写的不好,希望能抛砖引玉,大侠勿拍!!这个是里面用到的flash...

    flex与js交互 关于ExternalInterface使用的小例子

    标题“flex与js交互 关于ExternalInterface使用的小例子”指出了本文将探讨如何使用Flex的ExternalInterface类与JavaScript进行通信。ExternalInterface是Flex提供的一个API,允许ActionScript(Flex的主要编程语言...

    as3.0利用ExternalInterface与js交互的播放器

    在本文中,我们将深入探讨如何在AS3.0(ActionScript 3.0)中使用ExternalInterface类与JavaScript进行交互,特别是在实现一个自定义播放器的场景中。这个主题是针对那些希望在网页中集成Flash内容并与网页的...

    ExternalInterface

    `ExternalInterface`是ActionScript中一个极其重要的类,它作为一座桥梁,连接了Flash Player内部的世界与外部的Web环境,特别是与网页中的JavaScript交互的能力。这一功能在Flash作为网页多媒体内容制作标准的时代...

    JavaScript与ActionScript3交互问题总结

    JavaScript与ActionScript3之间的交互主要基于两种技术:Flash Player的ExternalInterface API和浏览器的跨文档消息传递(Cross-document messaging,CDM)。ExternalInterface API允许AS3代码暴露方法给JavaScript...

    Flex与JS交互

    Flex与JavaScript交互是Web开发中的一个重要技术,它允许在Adobe Flash Player或...通过深入学习和实践这两个强大的技术,开发者可以构建出既美观又功能丰富的Web应用,同时享受到Flex的交互性和JavaScript的灵活性。

    FLASH与ASP交互实例

    通过分析`lv_shiyan.fla`中的ActionScript,我们可以看到如何使用`ExternalInterface`类与JavaScript通信,而JavaScript再与ASP页面进行Ajax交互。`lv_shiyan.html`中会设置`allowScriptAccess`属性,允许Flash与...

    VC++ 与flash交互

    总结,VC++与Flash的交互是通过ActiveX控件和Flash的`ExternalInterface`实现的,允许在VC++程序中控制Flash的动态内容,同时Flash也能向VC++发送数据。尽管这种交互方式在某些版本的Flash中可能不适用,但通过了解...

    C# 与Flash交互简单示例【源码完美运行】

    6. **源码分析**:提供的源码可能包括两个部分:C#代码和Flash的ActionScript代码。C#代码可能包含处理JavaScript调用的方法,而ActionScript代码则包含调用C#的逻辑。通过调试和分析源码,可以更好地理解它们是如何...

    Flash与JS交互案例

    在网页开发中,Flash与JavaScript(JS)的交互是一个重要的技术点,特别是在过去,当HTML5的Canvas和WebGL等技术尚未普及时,Flash被广泛用于实现动态效果和交互式内容。本案例“Flash与JS交互案例”展示了如何在...

    flex与JS交互示例

    Flex与JavaScript交互是Web开发中的一个重要技术,它允许在Adobe Flex应用和HTML页面之间进行数据交换和功能调用。在本示例中,我们将深入探讨如何实现这种交互,并通过具体的步骤来理解其工作原理。 首先,Flex是...

    flex与js交互2

    通过以上介绍,我们可以看到`ExternalInterface`类提供了强大的功能,不仅能够实现Flex与JavaScript之间的相互调用,还能增强Flex应用与HTML页面之间的交互性。无论是从Flex调用JavaScript还是从JavaScript调用Flex...

    javascript与flash之间的交互(例子)

    通过分析这两个项目,你可以深入理解 ExternalInterface API 的工作原理,以及如何在实际项目中应用 JavaScript 和 Flash 的交互。这些示例对于学习历史上的 Web 技术和了解技术演变过程非常有价值。 **总结** ...

    flash与java交互的方法

    在Flash与Java交互的过程中,核心机制是通过Flash Player提供的`ExternalInterface`类实现ActionScript方法与容器(例如网页浏览器)中的JavaScript或ActiveX代码之间的调用。这使得开发人员能够在Flash应用程序内部...

    MFC与Flash交互

    标题中的“MFC与Flash交互”是指在MFC应用中嵌入和控制Flash内容,以实现更丰富的用户界面和增强的交互性。这通常涉及使用ActiveX控件或Adobe Flash Player插件来在MFC程序中集成SWF(ShockWave Flash)文件。通过...

    Qt和flash交互

    总之,Qt与Flash的交互涉及多个层次的技术,包括QWebView的使用、JavaScript中介、Flash的ExternalInterface以及安全和性能优化。虽然这种交互方式在特定场景下依然有用,但随着技术的发展,开发者应考虑是否有必要...

    AS3与C#交互,有返回值

    首先来看AS3侧的实现,代码中使用了`ExternalInterface`类来实现与外部(这里指C#)的交互。 ```as3 import flash.external.*; // 注册回调函数 ExternalInterface.addCallback("c2flash", c2flash); // 定义回调...

    FLEX与JS数据交互,以及Google插件IFrame的使用

    在IT行业中,FLEX与JavaScript的数据交互以及Google插件IFrame的使用是Web开发中的重要技术环节。FLEX是一款基于Adobe Flash Player的富互联网应用程序(RIA)开发框架,而JavaScript则是网页开发的标准脚本语言。当...

    C#与flex交互

    而SmartInvoke则是一个专门用于C#与Flex交互的库,提供更丰富的功能和更好的性能。 6. **异常处理和优化**: 在实际开发中,需要注意错误处理和性能优化,例如,确保调用方法的参数类型匹配,防止跨域安全问题,...

    flex与flash的交互

    通过深入理解这两个平台的特性和交互机制,开发者能够充分发挥它们的优势,创造出令人印象深刻的用户体验。在实际项目中,根据需求选择合适的工具和技术,结合Flex和Flash的强项,能够实现更高效、更具吸引力的Web...

Global site tag (gtag.js) - Google Analytics