【问题标题】:WebGL detected as supported when it is actually notWebGL 在实际不支持时检测为受支持
【发布时间】:2017-04-21 18:08:49
【问题描述】:

我在 Android 的 WebView 中使用 WebGL。为了检测是否支持 WebGL,我使用的是this function

Android KitKat 设备没有启用 WebGL 支持,正如随处提到的那样。但是,在我的 4.4.2 测试设备中,检测功能返回 true,当从 WebView 调用 http://webglreport.com 时,它还显示支持 WebGL1。

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

有什么方法可以更好地检测 webGL?或者我应该说“如果 Android

【问题讨论】:

  • 哪个设备似乎误报了?
  • 这里是佳鱼S2手机。

标签: javascript android android-webview webgl android-4.4-kitkat


【解决方案1】:

我在使用 Android 设备时也有过类似的经历。通过将 Android 浏览器列入黑名单来解决(如果我理解正确,还有股票网络视图)。更新后的 Chrome 通常可以正常工作。

【讨论】:

  • 谢谢。我不能真正将 WebView 列入黑名单,因为目标是使用 WebView 的混合应用程序。
  • 可能还有其他方法。尝试渲染小的简单场景并从帧缓冲区中读取。如果看起来没问题,那么应用程序可以继续使用 WebGL 代码路径。否则,显示使用后备的错误消息。
【解决方案2】:

根据@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");
}

【讨论】:

    猜你喜欢
    • 2012-08-05
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 2011-07-31
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    相关资源
    最近更新 更多