我最近开始在我正在开发的网站上使用WebGL.它被用作增强功能,如果WebGL不受支持或出现错误,则网站将返回到画布呈现.
不幸的是,当Google Chrome出现WebGL时,会出现一条错误消息栏.用户与之互动之前,此栏不会消失.如果他们重新加载或导航到不同的页面,该信息将在下次网站尝试使用WebGL时重新出现.
在我的网站的情况下,这意味着WebGL错误消息永远不会消失,因为每个页面都尝试使用WebGL.一旦出现错误,Chrome将不会在同一个网站上再次使用WebGL,直到用户告诉它重新加载,因此连续错误消息并不表示持续错误,只是连续尝试使用WebGL.
一旦发生WebGL错误,该对话框可以通过运行:
document.createElement('canvas').getContext('experimental-webgl');
这不会引起任何异常,我的.onerror方法在canvas元素上没有被调用.
我无法深入调查这一点,因为我无法可靠地重现WebGL错误. (即使我可以在我的电脑上再现一个,可能不会对其他人重现).
对于依赖于WebGL的网站而言,这种行为是合理的,但是我的这个网站不是这样,所以这个消息只是让用户分心和混乱.
解决方法
如果你想忽略这个例外,那么以下就足够了.
canvas.addEventListener("webglcontextlost",function(e) { e.preventDefault(); Stopdrawing(); },false);
如果要重试加载webgl上下文
canvas.addEventListener("webglcontextrestored",function (event) {initializeResources(); },false);
编辑:
如果要测试上下文是否正确处理,请使用webgl上下文中的WEBGL_lose_context扩展名.
gl.getExtension("WEBGL_lose_context").loseContext() gl.getExtension("WEBGL_lose_context").restoreContext()