13 javascript google-chrome webgl
我最近开始在我正在开发的网站上使用WebGL.它被用作增强功能,如果WebGL不受支持或出现错误,该网站将回退到画布渲染.
不幸的是,当Google Chrome中出现WebGL异常时,会显示错误消息栏.在用户与之交互之前,此栏不会消失.如果他们重新加载或导航到其他页面,则下次站点尝试使用WebGL时,该消息将重新出现.
对于我的站点,这意味着WebGL错误消息永远不会消失,因为每个页面都尝试使用WebGL.一旦发生错误,Chrome将不再在同一站点上使用WebGL,直到用户将其指示为Reload,因此连续错误消息实际上并不表示连续错误,只是连续尝试使用WebGL.
一旦发生WebGL错误,只需运行以下命令即可在该站点上重现此对话框:
document.createElement('canvas').getContext('experimental-webgl');
Run Code Online (Sandbox Code Playgroud)
这不会引发任何异常,并且我.onerror没有调用canvas元素上的方法.
我无法深入研究这个因为我无法可靠地重现WebGL错误.(即使我可以在我的计算机上复制一个,但在其他计算机上可能无法再现.)
对于依赖WebGL的站点来说,这种行为是合理的,但是我的做法并不合适,因此消息只会让用户分心和混淆.
有没有办法抑制此错误消息?一旦发生错误,我不介意回到忽略 WebGL 的Ignore行为.
如果要忽略该异常,则以下内容应该足够了.
canvas.addEventListener("webglcontextlost", function(e) { e.preventDefault(); Stopdrawing(); }, false);
Run Code Online (Sandbox Code Playgroud)
如果要重试加载webgl上下文
canvas.addEventListener("webglcontextrestored", function (event) {initializeResources(); }, false);
Run Code Online (Sandbox Code Playgroud)
编辑:
如果要测试是否正确处理了上下文,请在webgl上下文中使用WEBGL_lose_context扩展.
gl.getExtension("WEBGL_lose_context").loseContext()
gl.getExtension("WEBGL_lose_context").restoreContext()
Run Code Online (Sandbox Code Playgroud)