按 Ctrl+C 复制代码 按 Ctrl+C 复制代码 我们把对IE的判断放在第一,因为IE的用户最多,其次是判断Firefox。按使用者多少的顺序来判断浏览器类型,可以提高判断效率,少做无用功。之所以将Chrome放在第三判断,是因为我们预测Chrome很快会成为市场占有率第三的浏览器。其中,在分析浏览器版本时,用到了正则表达式来析取其中的版本信息。 如果你的JavaScript玩得很高,你还可以将前面的判断代码写成这样: < script type ="text/javascript" > var Sys = {}; var ua = navigator.userAgent.toLowerCase(); window.ActiveXObject ? Sys.ie = ua.match( / msie ([\d.]+) / )[ 1 ] : document.getBoxObjectFor ? Sys.firefox = ua.match( / firefox\ / ([\d.] + ) / )[1] : window.MessageEvent && ! document.getBoxObjectFor ? Sys.chrome = ua.match( / chrome\ / ([\d.] + ) / )[1] : window.opera ? Sys.opera = ua.match( / opera.([\d.]+) / )[ 1 ] : window.openDatabase ? Sys.safari = ua.match( / version\ / ([\d.] + ) / )[1] : 0; // 以下进行测试 if (Sys.ie) document.write( ' IE: ' + Sys.ie); if (Sys.firefox) document.write( ' Firefox: ' + Sys.firefox); if (Sys.chrome) document.write( ' Chrome: ' + Sys.chrome); if (Sys.opera) document.write( ' Opera: ' + Sys.opera); if (Sys.safari) document.write( ' Safari: ' + Sys.safari); </ script > 这样可以使JavaScript代码更精简些。当然,可读性稍差一些,就看你是重视效率还是重视可维护性了。 使用不同特征来判断浏览器的方法,虽然在速度上比用正则表达式分析userAgent要来的快,不过这些特征可能会随浏览器版本而变化。比如,一种浏览器本来独有的特性取得了市场上的成功,其他浏览器也就可能跟着加入该特性,从而使该浏览器的独有特征消失,导致我们的判断失败。因此,相对比较保险的做法是通过解析userAgent中的特征来判断浏览器类型。何况,反正判断版本信息也需要解析浏览器的userAgent的。 通过分析各类浏览器的userAgent信息,不难得出分辨各类浏览器及其版本的正则表达式。而且,对浏览器类型的判断和版本的判断完全可以合为一体地进行。于是,我们可以写出下面的代码:
< script type ="text/javascript" > var Sys = {}; var ua = navigator.userAgent.toLowerCase(); var s; (s = ua.match( / msie ([\d.]+) / )) ? Sys.ie = s[ 1 ] : (s = ua.match( / firefox\ / ([\d.] + ) / )) ? Sys.firefox = s[1] : (s = ua.match( / chrome\ / ([\d.] + ) / )) ? Sys.chrome = s[1] : (s = ua.match( / opera.([\d.]+) / )) ? Sys.opera = s[ 1 ] : (s = ua.match( / version\ / ([\d.] + ). * safari / )) ? Sys.safari = s[1] : 0; // 以下进行测试 if (Sys.ie) document.write( ' IE: ' + Sys.ie); if (Sys.firefox) document.write( ' Firefox: ' + Sys.firefox); if (Sys.chrome) document.write( ' Chrome: ' + Sys.chrome); if (Sys.opera) document.write( ' Opera: ' + Sys.opera); if (Sys.safari) document.write( ' Safari: ' + Sys.safari); </ script > 其中,采用了“... ? ... : ...”这样的判断表达式来精简代码。判断条件是一条赋值语句,既完成正则表达式的匹配及结果复制,又直接作为条件判断。而随后的版本信息只需从前面的匹配结果中提取即可,这是非常高效的代码。 以上的代码都是为了打造前端框架所做的预研,并在五大浏览器上测试通过。今后,判断某种浏览器只需用if(Sys.ie)或if(Sys.firefox)等形式,而判断浏览器版本只需用if(Sys.ie == '8.0')或if(Sys.firefox == '3.0')等形式,表达起来还是非常优雅的。 前端框架项目已经启动,一切就看过程和结果了...
转载于:https://www.cnblogs.com/yuanq_20/articles/3046238.html
相关资源:数据结构—成绩单生成器