基于js判断浏览器是否支持webGL


Posted in Javascript onApril 18, 2020

起因是我之前开发的网页,用到了three.js制作了一个3d的旋转球体效果。

在各种浏览器上运行都没问题,在IE上也做了兼容代码。

但是今天接电话,老板说你这网页在xp上不显示啊。IE上好使。google浏览器不好使。

于是开始解决问题,不禁陷入了沉思。what?网页显示难道还与操作系统有关?google竟然不好使?

于是搭建一个xp虚拟机。

于是下载一个chorme。

惊奇的发现并不能安装最新版本的chrome。

哦?一定是xp上安装的低版本chrome而那时候的chrome还不支持webGL。这个坑啊。

于是机智的我打算获取谷歌版本,低版本的话不执行那段js。于是如下代码:

function getChromeVersion() {
    var arr = navigator.userAgent.split(' '); 
    var chromeVersion = '';
    for(var i=0;i < arr.length;i++){
      if(/chrome/i.test(arr[i]))
      chromeVersion = arr[i]
    }
    if(chromeVersion){
      return Number(chromeVersion.split('/')[1].split('.')[0]);
    } else {
      return false;
    }
  }

这个可以返回谷歌浏览器的前两个号码。由此判断低版本,49为支持xp的最高版本。

本想美滋滋解决。又想起。我也不确定50以上全支持啊!!!

于是继续搞起,找一个让浏览器自己判断是否支持webGL的东西。

于是如下;

var Detector = {
  canvas: !!window.CanvasRenderingContext2D,
  webgl: (function() {
    try {
      var canvas = document.createElement('canvas');
      return !!(window.WebGLRenderingContext && (canvas.getContext('webgl') || canvas.getContext('experimental-webgl')));
    } catch(e) {
      return false;
    }
  })(),
  workers: !!window.Worker,
  fileapi: window.File && window.FileReader && window.FileList && window.Blob,
  getWebGLErrorMessage: function() {
    var element = document.createElement('div');
    element.id = 'webgl-error-message';
    element.style.fontFamily = 'monospace';
    element.style.fontSize = '13px';
    element.style.fontWeight = 'normal';
    element.style.textAlign = 'center';
    element.style.background = '#fff';
    element.style.color = '#000';
    element.style.padding = '1.5em';
    element.style.width = '400px';
    element.style.margin = '5em auto 0';
    if(!this.webgl) {
      element.innerHTML = window.WebGLRenderingContext ? [
        'Your graphics card does not seem to support <a href="http://khronos.org/webgl/wiki/Getting_a_WebGL_Implementation" rel="external nofollow" rel="external nofollow"  style="color:#000">WebGL</a>.<br />',
        'Find out how to get it <a href="http://get.webgl.org/" rel="external nofollow" rel="external nofollow"  style="color:#000">here</a>.'
      ].join('\n') : [
        'Your browser does not seem to support <a href="http://khronos.org/webgl/wiki/Getting_a_WebGL_Implementation" rel="external nofollow" rel="external nofollow"  style="color:#000">WebGL</a>.<br/>',
        'Find out how to get it <a href="http://get.webgl.org/" rel="external nofollow" rel="external nofollow"  style="color:#000">here</a>.'
      ].join('\n');
    }
    return element;
  },
  addGetWebGLMessage: function(parameters) {
    var parent, id, element;
    parameters = parameters || {};
    parent = parameters.parent !== undefined ? parameters.parent : document.body;
    id = parameters.id !== undefined ? parameters.id : 'oldie';
    element = Detector.getWebGLErrorMessage();
    element.id = id;
    parent.appendChild(element);
  }
};
if(typeof module === 'object') {
  module.exports = Detector;
}

通过调用Detector.webgl,如果返回true为支持,false为不支持。

至此将three.js的代码放入其中,即可由浏览器自己判断是否支持。如果支持就执行。不支持就不执行。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
在javascript中关于节点内容加强
Apr 11 Javascript
node.js中的console.error方法使用说明
Dec 10 Javascript
BootStrap制作导航条实例代码
May 06 Javascript
浅谈javascript基础之客户端事件驱动
Jun 10 Javascript
js中的事件委托或是事件代理使用详解
Jun 23 Javascript
详解Vue学习笔记入门篇之组件的内容分发(slot)
Jul 17 Javascript
jquery.uploadView 实现图片预览上传功能
Aug 10 jQuery
jQuery 实现鼠标画框并对框内数据选中的实例代码
Aug 29 jQuery
vue.js-div滚动条隐藏但有滚动效果的实现方法
Mar 03 Javascript
JavaScript碰撞检测原理及其实现代码
Mar 12 Javascript
微信小程序实现滚动Tab选项卡
Nov 16 Javascript
详解 TypeScript 枚举类型
Nov 02 Javascript
JavaScript对象字面量和构造函数原理与用法详解
Apr 18 #Javascript
javascript 内存模型实例详解
Apr 18 #Javascript
javascript-hashchange事件和历史状态管理实例分析
Apr 18 #Javascript
javascript使用Blob对象实现的下载文件操作示例
Apr 18 #Javascript
原生js实现的观察者和订阅者模式简单示例
Apr 18 #Javascript
es6函数name属性功能与用法实例分析
Apr 18 #Javascript
es6数组includes()用法实例分析
Apr 18 #Javascript
You might like
认识并使用PHP超级全局变量
2010/01/26 PHP
PHP简单获取网站百度搜索和搜狗搜索收录量的方法
2016/08/23 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
js 浏览器事件介绍
2012/03/30 Javascript
JavaScript简单实现网页回到顶部功能
2013/11/12 Javascript
深入理解JS中的变量及作用域、undefined与null
2014/03/04 Javascript
Jquery简单实现GridView行高亮的方法
2015/06/15 Javascript
原生JS实现的放大镜效果实例代码
2016/10/15 Javascript
JavaScript正则表达式实例详解
2016/10/16 Javascript
jquery获取img的src值实例介绍
2019/01/16 jQuery
Node.js动手撸一个静态资源服务器的方法
2019/03/09 Javascript
在Layui中实现开关按钮的效果实例
2019/09/29 Javascript
js实现随机抽奖
2020/03/19 Javascript
云服务器部署Node.js项目的方法步骤(小白系列)
2020/03/23 Javascript
js实现盒子滚动动画效果
2020/08/09 Javascript
JS实现选项卡插件的两种写法(jQuery和class)
2020/12/30 jQuery
[03:34]2014DOTA2西雅图国际邀请赛 淘汰赛7月15日TOPPLAY
2014/07/15 DOTA
[00:32]2018DOTA2亚洲邀请赛出场——LGD
2018/04/04 DOTA
python单元测试unittest实例详解
2015/05/11 Python
Python闭包的两个注意事项(推荐)
2017/03/20 Python
python 信息同时输出到控制台与文件的实例讲解
2018/05/11 Python
快速解决docker-py api版本不兼容的问题
2019/08/30 Python
python 3.6.7实现端口扫描器
2019/09/04 Python
手把手教你进行Python虚拟环境配置教程
2020/02/03 Python
Python之字典对象的几种创建方法
2020/09/30 Python
Python运算符+与+=的方法实例
2021/02/18 Python
小程序瀑布流解决左右两边高度差距过大的问题
2019/02/20 HTML / CSS
萌新的HTML5 入门指南
2020/11/06 HTML / CSS
viagogo法国票务平台:演唱会、体育比赛、戏剧门票
2017/03/27 全球购物
求职信的七个关键技巧
2014/02/05 职场文书
新学期标语
2014/06/30 职场文书
2014年煤矿工人工作总结
2014/12/08 职场文书
保护环境的宣传语
2015/07/13 职场文书
中学教师教学工作总结
2015/08/13 职场文书
win10下go mod配置方式
2021/04/25 Golang
在Windows Server 2012上安装 .NET Framework 3.5 所遇到的问题
2022/04/29 Servers