11RIA 闪客社区 - 最赞 Animate Flash 论坛

搜索
查看: 2089|回复: 2
上一主题 下一主题

[AS 开发 & 技巧] 【9RIA—iloveas】— AS3游戏实用技巧(17):一行代码远离Google浏览器兼容问题的困扰

[复制链接] TA的其它主题
发表于 2018-12-14 15:44:05 | 显示全部楼层 |阅读模式

【游客模式】——注册会员,加入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又怎能不设置回复可见呢?


发表于 2019-1-24 15:11:05 | 显示全部楼层
66666谢谢大佬的分享
回复

使用道具 举报

发表于 2020-10-12 10:36:36 | 显示全部楼层
一行神奇的代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

感谢所有支持论坛的朋友:下面展示最新的5位赞助和充值的朋友……更多赞助和充值朋友的信息,请查看:永远的感谢名单

SGlW(66139)、 anghuo(841)、 whdsyes(255)、 longxia(60904)、 囫囵吞澡(58054)

下面展示总排行榜的前3名(T1-T3)和今年排行榜的前3名的朋友(C1-C3)……更多信息,请查看:总排行榜今年排行榜

T1. fhqu1462(969)、 T2. lwlpluto(14232)、 T3. 1367926921(962)  |  C1. anghuo(147)、 C2. fdisker(27945)、 C3. 囫囵吞澡(58054)



快速回复 返回顶部 返回列表