嵌入式浏览器内原生javaScript出错
记录一次开发中遇到的一个问题。
第一次在智慧大屏类似的设备上开发,没留意内嵌的浏览器的版本。在js里使用了let和const这两个关键字导致js错误,页面瘫痪。
先贴一下let和const的简介吧
ES2015(ES6) 新增加了两个重要的 JavaScript 关键字: let 和 const。
let 声明的变量只在 let 命令所在的代码块内有效。
const 声明一个只读的常量,一旦声明,常量的值就不能改变。
在 ES6 之前,JavaScript 只有两种作用域: 全局变量 与 函数内的局部变量。
下表列出了各个浏览器支持 let 关键字的最低版本号。
谷歌浏览器 | IE浏览器 | 火狐浏览器 | Safari | Opera |
---|---|---|---|---|
Chrome 49 | IE / Edge 12 | Firefox 44 | Safari 11 | Opera 36 |
Mar, 2016 | Jul, 2015 | Jan, 2015 | Sep, 2017 | Mar, 2016 |
下表列出了各个浏览器支持 const 关键字的最低版本号。
谷歌浏览器 | IE浏览器 | 火狐浏览器 | Safari | Opera |
---|---|---|---|---|
Chrome 49 | IE / Edge 11 | Firefox 36 | Safari 10 | Opera 36 |
Mar, 2016 | Oct, 2013 | Feb, 2015 | Sep, 2016 | Mar, 2016 |
可以通过原生js去检测浏览器的内核和版本号。
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<body style="background-color: #CCFFCC">
<h1>浏览器内核版本检测</h1>
由 document.write(navigator.userAgent) 给出原始字串为<br><br>:
<script>
document.write(navigator.userAgent);
document.write('<hr><h2>解析结果:</h2><p><br>');
var u_agent = navigator.userAgent;
var browser_name='Failed to identify the browser';
if(u_agent.indexOf('Firefox')>-1){
browser_name='Firefox';
}else if(u_agent.indexOf('Chrome')>-1){
browser_name='Chrome';
}else if(u_agent.indexOf('Trident')>-1&&u_agent.indexOf('rv:11')>-1){
browser_name='IE11';
}else if(u_agent.indexOf('MSIE')>-1&&u_agent.indexOf('Trident')>-1){
browser_name='IE(8-10)';
}else if(u_agent.indexOf('MSIE')>-1){
browser_name='IE(6-7)';
}else if(u_agent.indexOf('Opera')>-1){
browser_name='Opera';
}else{
browser_name+=',info:'+u_agent;
}
document.write('browser_name: '+browser_name+'<br><br><br>');
document.write('u_agent: '+u_agent+'<br>');
</script>
<iframe src="http://mybrowse.osfipin.com" width="100%" height="400" scrolling="yes" />
</body>
</html>
在浏览器中打开显示如下。
于是我用大屏内置浏览器访问了我本地的服务,显示chrome版本是39,明显是不支持let和const关键字的。
最后,在使用javaScript中的关键字时,请一定要注意它最低支持的版本号,若是跨平台开发,则要尽量避免这种问题。
希望这篇文章能帮助到你们。