【游客模式】——注册会员,加入11RIA 闪客社区吧!一起见证Flash的再次辉煌……
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 TKCB 于 2019-3-19 09:11 编辑
转载:9RIA游戏开发者社区(天地会)
作者:iloveas(大神)
总目录:[原创]AS3游戏开发实用技巧汇总
跟Html相比,Web Flash开发的最大优势就在于兼容性好,因为FlashPlayer的开发商只有Adobe一家。但自从Google插了一脚进来,改版出自己的FlashPlayer以后,这一优势就不复存在,各种蛋疼的兼容问题也就随之而来,Flash WebGame领域自然也难逃一劫了。
要解决兼容问题,首先就得判断用户的浏览器类型,为此iloveas翻遍整个互联网,搜集各类与兼容相关的代码,并且仿照js的写法,在as里封装了如下一个类:
[Actionscript3] 纯文本查看 复制代码
package util.external {
import flash.external.ExternalInterface;
public class ExternalUtil{
private static var _browserName:String;
public static function getBrowserName():String {
if(!ExternalInterface.available) {
return BrowserName.STANDALONE_PLAYER;
}
if(!_browserName) {
var browserNameAgent:String = String(ExternalInterface.call("eval", "navigator.userAgent"));
if (/msie/i.test(browserNameAgent) && (/opera/.test(browserNameAgent) == false)) {
_browserName = BrowserName.IE;
} else if (/firefox/i.test(browserNameAgent)) {
_browserName = BrowserName.FIRE_FOX;
} else if (/chrome/i.test(browserNameAgent) && /webkit/i.test(browserNameAgent) && /mozilla/i.test(browserNameAgent)) {
_browserName = BrowserName.CHROME;
} else if (/opera/i.test(browserNameAgent)) {
_browserName = BrowserName.OPERA;
} else if (/webkit/i.test(browserNameAgent) && !(/chrome/i.test(browserNameAgent) && /webkit/i.test(browserNameAgent) && /mozilla/i.test(browserNameAgent))) {
_browserName = BrowserName.SAFARI;
} else {
_browserName = BrowserName.UNKNOW;
}
}
return _browserName;
}
}
}
这个类用起来很方便,但与此同时,它的问题也灰常的多。
首先,虽然代码在AS里,但运行的时候还是通过JS来获取相关信息,因此这个类本身也有兼容问题,AS跟JS的通讯容易受安全沙箱影响,有时不好解决。
其次,Google浏览器可以使用原生的FlashPlayer,这种情况下,以上代码容易造成误判。
再次,需要区分独立播放器(虽然大多数情况不需要考虑),对于后续的处理相当不便。
最后,也是最最重要的,这个类的代码不止一行,不符合本帖的宗旨。
所幸的是,iloveas在搜索其他问题的解决方案时很意外地找到了一个方法,它深入到FlashPlayer,而且不需要依赖于js,不易受浏览器的影响,而且最最重要的,这个方法只需要一行代码:
就能得到很精准的结果。
当然了,判断还只是第一步,后续的处理还要结合项目的具体情况。但iloveas相信,有了这样的一行代码,剩下的问题都很好解决了。
这行代码在问答求助区里有大神提到过,理论上大家完全可以搜得到,只是搜索的成本相对较高。相比之下,回复本帖就简单的多了。既然如此,iloveas又怎能不设置回复可见呢?
|