
学习目标掌握检查WebGL支持的实现方法理解相关API的使用能够独立完成类似功能开发 核心概念检查浏览器是否支持WebGL。 完整代码代码示例functionisWebglSupported(){if(window.WebGLRenderingContext){constcanvasdocument.createElement(canvas);try{// 注意可以将 { failIfMajorPerformanceCaveat: true } 作为第二个参数// 传递给 canvas.getContext()如果硬件渲染不可用检查将失败。有关更多// 详细信息请参见 https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/getContext。constcontextcanvas.getContext(webgl2)||canvas.getContext(webgl);if(contexttypeofcontext.getParameterfunction){returntrue;}}catch(e){// WebGL 已支持但被禁用}returnfalse;}// WebGL 不支持returnfalse;}if(!isWebglSupported()){alert(Your browser does not support WebGL);}else{constmapnewmaplibregl.Map({container:map,style:https://demotiles.maplibre.org/style.json,center:[-74.5,40],zoom:2});}代码示例!DOCTYPEhtmlhtmllangenheadtitleCheck if WebGL is supported/titlemetapropertyog:descriptioncontent检查浏览器是否支持 WebGL。/metapropertyog:createdcontent2025-06-25/metacharsetutf-8metanameviewportcontentwidthdevice-width, initial-scale1linkrelstylesheethrefhttps://unpkg.com/maplibre-gl5.24.0/dist/maplibre-gl.css/scriptsrchttps://unpkg.com/maplibre-gl5.24.0/dist/maplibre-gl.js/scriptstylebody{margin:0;padding:0;}html, body, #map{height:100%;}/style/headbodydividmap/divscriptfunctionisWebglSupported(){if(window.WebGLRenderingContext){constcanvasdocument.createElement(canvas);try{// 注意{ failIfMajorPerformanceCaveat: true } 可以作为第二个参数传递给// canvas.getContext()如果硬件渲染不可用检查将失败。详情请参见// https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLCanvasElement/getContextconstcontextcanvas.getContext(webgl2)||canvas.getContext(webgl);if(contexttypeofcontext.getParameterfunction){returntrue;}}catch(e){// WebGL 已支持但被禁用}returnfalse;}// WebGL 不支持returnfalse;}if(!isWebglSupported()){alert(Your browser does not support WebGL);}else{constmapnewmaplibregl.Map({container:map,style:https://demotiles.maplibre.org/style.json,center:[-74.5,40],zoom:2});}/script/body/html 代码解析1. WebGL支持检测函数isWebglSupported()函数检测浏览器是否支持WebGL首先检查window.WebGLRenderingContext是否存在创建一个canvas元素尝试获取WebGL上下文优先尝试获取webgl2上下文如果失败则尝试webgl检查上下文是否有效并包含getParameter方法2. 检测选项可以通过传入{ failIfMajorPerformanceCaveat: true }参数来检测硬件加速是否可用。如果硬件渲染不可用检查会失败。这对于需要高性能WebGL的应用很重要。3. 条件初始化地图只有在WebGL支持检测通过后才创建MapLibre地图实例。如果不支持可以显示友好的错误提示或提供降级方案。4. 错误处理使用try-catch捕获WebGL上下文创建过程中的异常确保即使WebGL被浏览器禁用也能优雅处理。⚙️ 参数说明canvas.getContext 参数参数类型说明contextTypestring上下文类型‘webgl’ 或 ‘webgl2’options.failIfMajorPerformanceCaveatboolean硬件加速不可用时是否失败isWebglSupported 函数返回值返回值类型说明trueboolean浏览器支持WebGLfalseboolean浏览器不支持WebGL或WebGL被禁用 效果说明运行代码后首先检测浏览器是否支持WebGL如果支持WebGL地图正常初始化并显示默认显示美国东部区域如果不支持弹出警告框提示Your browser does not support WebGL这种优雅降级处理确保了在不支持WebGL的环境中不会出现空白页面或崩溃。 常见问题Q1: 浏览器支持WebGL但地图仍然不显示怎么办A:可能是WebGL被浏览器扩展、安全设置或企业策略禁用。检查浏览器控制台是否有WebGL相关错误尝试在隐私模式下打开页面测试。Q2: 如何检测WebGL2而不只是WebGL1A:修改代码只检测webgl2上下文functionisWebgl2Supported(){constcanvasdocument.createElement(canvas);return!!(canvas.getContext(webgl2));}Q3: 在不支持WebGL的环境中如何提供降级方案A:可以显示静态地图图片如通过Google Static Maps API使用基于CSS的简单地图渲染提示用户升级浏览器 练习任务基础练习修改警告提示为更友好的自定义模态框进阶挑战添加WebGL性能检测提示用户设备性能等级拓展思考实现检测失败后的自动降级显示静态地图图片 最佳实践提前检测: 在加载地图库之前进行WebGL检测节省不必要的资源加载友好提示: 为不支持WebGL的用户提供清晰的提示和替代方案性能考虑: 使用failIfMajorPerformanceCaveat: true确保良好的用户体验错误处理: 使用try-catch捕获可能的异常确保检测过程不会中断页面加载 延伸阅读Map API文档Layer API文档Expression文档MapLibre GL JS 官方文档[下一课预告]将继续学习地图图层的基础知识本文是MapLibre GL JS实践课程系列的一部分欢迎关注收藏