0

我正在使用Android WebView WebGL。为了检测是否支持WebGL,我使用了this functionWebGL检测为支持时,它实际上不支持

Android KitKat设备没有启用WebGL支持,无处不在。但是,在我的4.4.2测试设备中,检测功能返回true,当从WebView调用http://webglreport.com时,它也表示支持WebGL1。

不出所料,没有任何东西被渲染。因此,如果WebGL不起作用,我想避免使用WebGL版本的页面。

有没有什么办法可以更好地检测webGL?或者我应该说“如果Android < 5,甚至不尝试检查是否支持WebGL,因为它可能存在”。

+0

哪个设备似乎误报? –

+0

在这种情况下,它是嘉鱼S2手机。 –

回答

1

我对Android设备有类似的体验。通过将Android浏览器列入黑名单来解决(并且,如果我理解正确,也可以使用Web视图)。更新的Chrome通常工作正常。

+0

谢谢。我无法真正将WebView黑名单,因为目标是使用WebView的混合应用程序。 –

+1

可能有另一种方法。尝试渲染小型简单场景并从帧缓冲区中读回。如果显示正常,那么应用程序可以继续使用WebGL代码路径。否则,显示使用回退的错误消息。 –

0

符合@ kirill-dmitrenko的回答,但是避免解析用户代理,我列出了所有不支持“let”构造的浏览器(http://caniuse.com/#feat=let),尽管它们不相关,但似乎受所有支持所有现代浏览器webgl:

var supported; 

try { 
    var canvas = document.createElement('canvas'); 
    supported = !! window.WebGLRenderingContext && (canvas.getContext('webgl') || canvas.getContext('experimental-webgl')); 
} catch(e) { supported = false; } 

try { 
    // let is by no means required, but will help us rule out some old browsers: http://caniuse.com/#feat=let 
    eval('let foo = 123;'); 
} catch (e) { supported = false; } 

if (supported === false) { 
    console.log("WebGL is not supported"); 
}