AS和JS在Maxthon、TT等浏览器无法通信的问题
2012-07-20 11:39
232 查看
出自:http://popotang.com/blog/as-js-maxthon-bug.html
某flash文件嵌入在网页上,提供了一些针对JS的接口以方便JS调用,这些接口是通过flash的ExternalInterface.call方法在flash里声明的。
在IE、Firefox等浏览器下,JS调用这些接口没有问题的,但是在Maxthon、TT、TheWorld浏览器下,第一次打开页面是可以的,刷新了页面就找不到这些接口了,JS直接报错说未声明。按理说Maxthon、TT这些浏览器也是IE的内核,只不过是装了个壳而已,怎么会有这个问题?既然第一次没有问题,初步分析就是这些浏览器对flash做了缓存处理。根据这个结论,做了个试验,在加载flash文件价格随即参数,防止缓存,反复测试没问题,但是这样做,每次都从服务器拉取文件,对服务器压力、带宽和打开速度都有很大影响,有没有更好的方法?
分析症状,应该是flash初始化的问题,而接口ExternalInterface.call是在初始化的时候注册的,是否是这里的问题呢?
反复测试,最终找到个解决问题的方案:
把所有接口声明的ExternalInterface.call抽出来放到一个单独的函数里,比如起名叫InitExtCall(这个名字可以随便命名的),然后在flash初始化函数里改成 setTimeout(InitExtCall,0); 问题解决。
至于为什么这样做可以解决,没有很深入的去分析。但是分析下javascript的setTimeout原理,无论在哪里声明,其作用域链都是在window下执行,有时候我们故意用这样的方式来解决一些跳转的问题,flash下是否也是这样的问题呢?
[2010-11-21] 在网上搜索发现另外一个解决方案:
在使用 innerHTML创建了flash 后,检查暴露函数如果不存在,即调用__flash__addCallback(flashObj, “funcName”);人工初始化暴露函数。
某flash文件嵌入在网页上,提供了一些针对JS的接口以方便JS调用,这些接口是通过flash的ExternalInterface.call方法在flash里声明的。
在IE、Firefox等浏览器下,JS调用这些接口没有问题的,但是在Maxthon、TT、TheWorld浏览器下,第一次打开页面是可以的,刷新了页面就找不到这些接口了,JS直接报错说未声明。按理说Maxthon、TT这些浏览器也是IE的内核,只不过是装了个壳而已,怎么会有这个问题?既然第一次没有问题,初步分析就是这些浏览器对flash做了缓存处理。根据这个结论,做了个试验,在加载flash文件价格随即参数,防止缓存,反复测试没问题,但是这样做,每次都从服务器拉取文件,对服务器压力、带宽和打开速度都有很大影响,有没有更好的方法?
分析症状,应该是flash初始化的问题,而接口ExternalInterface.call是在初始化的时候注册的,是否是这里的问题呢?
反复测试,最终找到个解决问题的方案:
把所有接口声明的ExternalInterface.call抽出来放到一个单独的函数里,比如起名叫InitExtCall(这个名字可以随便命名的),然后在flash初始化函数里改成 setTimeout(InitExtCall,0); 问题解决。
至于为什么这样做可以解决,没有很深入的去分析。但是分析下javascript的setTimeout原理,无论在哪里声明,其作用域链都是在window下执行,有时候我们故意用这样的方式来解决一些跳转的问题,flash下是否也是这样的问题呢?
[2010-11-21] 在网上搜索发现另外一个解决方案:
在使用 innerHTML创建了flash 后,检查暴露函数如果不存在,即调用__flash__addCallback(flashObj, “funcName”);人工初始化暴露函数。
相关文章推荐
- 锤子手机浏览器无法加载某个js的问题
- 解决修改css文件或js文件后浏览器无法及时更新的问题方法
- As和js通信问题完全解析(解决addcallback失效的问题)
- 使用Tomcat部署项目在浏览器中访问的时候JS和CSS等静态文件无法加载的问题
- javaweb 常见问题-第2篇- chrom google 浏览器 调试时js无法刷新的解决方法
- js读取xml文件,解决浏览器兼容问题
- 用JS判断浏览器是否是IE9以下,处理可能遇到的兼容性问题,或者给出浏览器版本过低的升级提醒。
- extjs使用一:extjs-base.js无法访问等等问题
- JS刷新的时候遇到浏览器刷新提示框的问题
- 实现ipad上的内嵌webview手势缩放图片(修改版,解决在第一张图片放大的情况下翻到下一张图片无法放大的问题) 基于Quo(js库)
- AS中无法使用AIDL描述文件问题
- 项目难题之ARM串口和台达伺服电机驱动器串口莫名其妙无法通信的问题
- js中startsWith 函数不能在任何浏览器兼容的问题
- 网站部署中遇到的问题-网页中js,css和图片资源无法加载
- JS中常遇到的浏览器兼容问题和解决方法
- 有关css和js针对不同浏览器兼容的问题
- 浏览器中JS的兼容问题
- js浏览器兼容问题总结及解决办法
- eclipse启动tomact成功,浏览器无法访问的问题
- 关于js或jquery通过ajax传递中文时无法插入mysql数据库的问题