creator 在build之后无法调起webgl

现象:TypeError: Cannot read property ‘getExtension’ of null

  • Creator 版本:2.2.1

  • 目标平台:Web

  • 详细报错信息,包含调用堆栈:
    cocos2d-js-min.62462.js:1 This device does not support webgl
    t @ cocos2d-js-min.62462.js:1
    initWebGL @ cocos2d-js-min.62462.js:1
    _initRenderer @ cocos2d-js-min.62462.js:1
    _initEngine @ cocos2d-js-min.62462.js:1
    _prepareFinished @ cocos2d-js-min.62462.js:1
    (anonymous) @ cocos2d-js-min.62462.js:1
    (anonymous) @ cocos2d-js-min.62462.js:1
    (anonymous) @ cocos2d-js-min.62462.js:1
    setTimeout (async)
    callInNextTick @ cocos2d-js-min.62462.js:1
    (anonymous) @ cocos2d-js-min.62462.js:1
    155.m.allComplete @ cocos2d-js-min.62462.js:1
    155.m.itemComplete @ cocos2d-js-min.62462.js:1
    155.p.itemComplete @ cocos2d-js-min.62462.js:1
    158.l.flowOut @ cocos2d-js-min.62462.js:1
    o @ cocos2d-js-min.62462.js:1
    (anonymous) @ cocos2d-js-min.62462.js:1
    (anonymous) @ cocos2d-js-min.62462.js:1
    a @ cocos2d-js-min.62462.js:1
    load (async)
    _ @ cocos2d-js-min.62462.js:1
    151.m.handle @ cocos2d-js-min.62462.js:1
    o @ cocos2d-js-min.62462.js:1
    o @ cocos2d-js-min.62462.js:1
    o @ cocos2d-js-min.62462.js:1
    o @ cocos2d-js-min.62462.js:1
    158.l.flowIn @ cocos2d-js-min.62462.js:1
    155.m.append @ cocos2d-js-min.62462.js:1
    145.v.load @ cocos2d-js-min.62462.js:1
    prepare @ cocos2d-js-min.62462.js:1
    run @ cocos2d-js-min.62462.js:1
    window.boot @ main.77721.js:175
    engineLoaded @ index.html:72
    load (async)
    (anonymous) @ index.html:74
    (anonymous) @ index.html:76
    45cocos2d-js-min.62462.js:1 TypeError: Cannot read property ‘getExtension’ of null
    at t.356.t._initExtensions (cocos2d-js-min.62462.js:1)
    at new t (cocos2d-js-min.62462.js:1)
    at Object.initWebGL (cocos2d-js-min.62462.js:1)
    at Object._initRenderer (cocos2d-js-min.62462.js:1)
    at Object._initEngine (cocos2d-js-min.62462.js:1)
    at Object._prepareFinished (cocos2d-js-min.62462.js:1)
    at y. (cocos2d-js-min.62462.js:1)
    at cocos2d-js-min.62462.js:1
    at cocos2d-js-min.62462.js:1
    356.t._initExtensions @ cocos2d-js-min.62462.js:1
    t @ cocos2d-js-min.62462.js:1
    initWebGL @ cocos2d-js-min.62462.js:1
    _initRenderer @ cocos2d-js-min.62462.js:1
    _initEngine @ cocos2d-js-min.62462.js:1
    _prepareFinished @ cocos2d-js-min.62462.js:1
    (anonymous) @ cocos2d-js-min.62462.js:1
    (anonymous) @ cocos2d-js-min.62462.js:1
    (anonymous) @ cocos2d-js-min.62462.js:1
    setTimeout (async)
    callInNextTick @ cocos2d-js-min.62462.js:1
    (anonymous) @ cocos2d-js-min.62462.js:1
    155.m.allComplete @ cocos2d-js-min.62462.js:1
    155.m.itemComplete @ cocos2d-js-min.62462.js:1
    155.p.itemComplete @ cocos2d-js-min.62462.js:1
    158.l.flowOut @ cocos2d-js-min.62462.js:1
    o @ cocos2d-js-min.62462.js:1
    (anonymous) @ cocos2d-js-min.62462.js:1
    (anonymous) @ cocos2d-js-min.62462.js:1
    a @ cocos2d-js-min.62462.js:1
    load (async)
    _ @ cocos2d-js-min.62462.js:1
    151.m.handle @ cocos2d-js-min.62462.js:1
    o @ cocos2d-js-min.62462.js:1
    o @ cocos2d-js-min.62462.js:1
    o @ cocos2d-js-min.62462.js:1
    o @ cocos2d-js-min.62462.js:1
    158.l.flowIn @ cocos2d-js-min.62462.js:1
    155.m.append @ cocos2d-js-min.62462.js:1
    145.v.load @ cocos2d-js-min.62462.js:1
    prepare @ cocos2d-js-min.62462.js:1
    run @ cocos2d-js-min.62462.js:1
    window.boot @ main.77721.js:175
    engineLoaded @ index.html:72
    load (async)
    (anonymous) @ index.html:74
    (anonymous) @ index.html:76
    cocos2d-js-min.62462.js:1 Uncaught TypeError: Cannot read property ‘getParameter’ of null
    at t.356.t._initCaps (cocos2d-js-min.62462.js:1)
    at new t (cocos2d-js-min.62462.js:1)
    at Object.initWebGL (cocos2d-js-min.62462.js:1)
    at Object._initRenderer (cocos2d-js-min.62462.js:1)
    at Object._initEngine (cocos2d-js-min.62462.js:1)
    at Object._prepareFinished (cocos2d-js-min.62462.js:1)
    at y. (cocos2d-js-min.62462.js:1)
    at cocos2d-js-min.62462.js:1
    at cocos2d-js-min.62462.js:1

  • 重现方式:访问即复现

  • 手机型号 :oppo 小米 多部测试机可复现

  • 手机浏览器 : 应用内原生webview实现

  • 编辑器操作系统 :macOS

  • 额外线索:该现象并非设备不支持webgl,在creator开发中,局域网地址可以正常访问和调起

设备webgl支持情况:
WebGL: Hardware accelerated

WebGL2: Hardware accelerated

在PC机 chrome中 build前后均正常渲染运行
真机webview运行时 build前访问正常 build后大部分机型出现该错误

1赞

此截图为访问开发模式地址,渲染运行正常

此截图为访问build构建后地址,报错提示不支持webgl

尝试升级显卡驱动看看。

安卓手机异常…这怎么升级显卡驱动,PC是正常的,截图是测试手机真机调试的inspect界面

你们就这么敷衍一下就不管了?

已经定位到问题是 canvas.GetContext(“webgl”) 返回值为 null
cocos core 在canvas未准备完毕的情况下调用GetContext 导致 在GetContext处尝试settimeout 0 后打印 canvas.GetContext(“webgl”) 返回值 正常

在报错的堆栈最底层 处修改代码:

        callInNextTick: function(t, e, i) {
            t && setTimeout((function() {
                t(e, i)
            }
            ), 0)
        }

修改为:

        callInNextTick: function(t, e, i) {
            t && setTimeout((function() {
                t(e, i)
            }
            ), 35)
        }

延迟35毫秒后 该报错消失 运行正常, 延迟数值 0-34 均无效 该数值约为两帧,请引擎组核查,此临时解决办法供其他人参考 如若无效,可根据设备帧率调整数值

3赞

非常感谢,这个问题在我这边的设备确实没能复现,根据你反馈的情况,我们会调查一下并考虑优化一下代码。

你好,请问你能否提供一下出现这个问题的测试机型给我们?

最近也遇到这个问题 errorMessage:Uncaught TypeError: Cannot read property ‘getParameter’ of nul lfile:cocos2d-js-min.3528d.js,line:1,message:806366,error:{}

最近做H5 的时候 也遇到了这个问题。 在某些手机上 会发生这个情况,进不去游戏。 但是有概率发生的,不一定能100%重现。好尴尬 请问有办法处理吗?

只能到html首页,游戏都卡住进不去。很影响用户体验

华为平板M5 偶尔出现

怀疑spine的根据是什么

我都没用spine,连这个模块都没勾选。 跟这个没关系

我用了,但是看到楼上说怀疑是spine。

引擎版本:2.2.2 版本,设备信息:
Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1301.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2875.116 Safari/537.36 NetType/WIFI MicroMessenger/7.0.5 WindowsWechat

{“error”:“Uncaught TypeError: Cannot read property ‘getParameter’ of null”,“pos”:{“file”:"./game/2.1.01/cocos2d-js-min.js",“line1”:1,“line2”:931924},“reference”:“TypeError: Cannot read property ‘getParameter’ of null”}

这个问题居然还在 。_ 。

最终有解决方案吗? 2.4.3 也遇到