微信小游戏在Game.js中调用http请求IOS闪退

  • Creator 版本:v2.0.10

  • 目标平台:IOS 微信小游戏

  • 详细报错信息: 我公司Iphone基本都会闪退,只又一台没有闪退

  • 重现方式:任意项目(可以是空项目)构建微信小游戏,再game.js中加入http请求(wx.request或者XMLHttpRequest都可以)真机预览,就会带着微信一起闪退。
    代码如下:

require('libs/weapp-adapter/index');
var Parser = require('libs/xmldom/dom-parser');
window.DOMParser = Parser.DOMParser;
require('libs/wx-downloader.js');
require('src/settings');
var settings = window._CCSettings;
require('main');
require(settings.debug ? 'cocos2d-js.js' : 'cocos2d-js-min.js');
require('./libs/engine/index.js');

// Adjust devicePixelRatio
cc.view._maxPixelRatio = 3;

wxDownloader.REMOTE_SERVER_ROOT = "";
wxDownloader.SUBCONTEXT_ROOT = "";
var pipeBeforeDownloader = cc.loader.subPackPipe || cc.loader.md5Pipe || cc.loader.assetLoader;
cc.loader.insertPipeAfter(pipeBeforeDownloader, wxDownloader);

if (cc.sys.browserType === cc.sys.BROWSER_TYPE_WECHAT_GAME_SUB) {
    var _WECHAT_SUBDOMAIN_DATA = require('src/subdomain.json.js');
    cc.game.once(cc.game.EVENT_ENGINE_INITED, function () {
        cc.Pipeline.Downloader.PackDownloader._doPreload("WECHAT_SUBDOMAIN", _WECHAT_SUBDOMAIN_DATA);
    });

    require('./libs/sub-context-adapter');
}
else {
    // Release Image objects after uploaded gl texture
    cc.macro.CLEANUP_IMAGE_CACHE = true;
}

////重点代码

wx.request({
  url: 'https://www.baidu.com',
  success: function() {
    wx.showToast({
      title: 'aaaaaa',
    })
    window.boot();
  }
})

  • 之前哪个版本是正常的 :

  • 手机型号 :IPhone6, 7,x, xs

  • 手机浏览器 :

  • 编辑器操作系统 :

  • 编辑器之前是否有其它报错 :

  • 出现概率:

  • 额外线索:

如果去掉Http请求就不会闪退了

经过测试;

如果请求的调用在引擎文件加载之前则表示为正常;

//...
var settings = window._CCSettings;
require('main');

wx.request({
  url: 'https://www.baidu.com',
  success: function() {
    wx.showToast({
      title: 'aaaaaa',
    })
    window.boot();
  }
})

require(settings.debug ? 'cocos2d-js.js' : 'cocos2d-js-min.js');
//...

如果在游戏内调用http请求也正常;
但是如果如上情况,在game.js中, 在引擎文件加载之后调用则会出现ios闪退

但是如果请求之后再加载引擎文件则不会出现闪退。

require('libs/weapp-adapter/index');
var Parser = require('libs/xmldom/dom-parser');
window.DOMParser = Parser.DOMParser;
require('libs/wx-downloader.js');
require('src/settings');
var settings = window._CCSettings;
require('main');


function boot() {
  require(settings.debug ? 'cocos2d-js.js' : 'cocos2d-js-min.js');
  require('./libs/engine/index.js');

  // Adjust devicePixelRatio
  cc.view._maxPixelRatio = 3;

  wxDownloader.REMOTE_SERVER_ROOT = "";
  wxDownloader.SUBCONTEXT_ROOT = "";
  var pipeBeforeDownloader = cc.loader.subPackPipe || cc.loader.md5Pipe || cc.loader.assetLoader;
  cc.loader.insertPipeAfter(pipeBeforeDownloader, wxDownloader);

  if (cc.sys.browserType === cc.sys.BROWSER_TYPE_WECHAT_GAME_SUB) {
    var _WECHAT_SUBDOMAIN_DATA = require('src/subdomain.json.js');
    cc.game.once(cc.game.EVENT_ENGINE_INITED, function () {
      cc.Pipeline.Downloader.PackDownloader._doPreload("WECHAT_SUBDOMAIN", _WECHAT_SUBDOMAIN_DATA);
    });

    require('./libs/sub-context-adapter');
  }
  else {
    // Release Image objects after uploaded gl texture
    cc.macro.CLEANUP_IMAGE_CACHE = true;
  }

  window.boot();
}

wx.request({
  url: 'https://www.baidu.com',
  success: function () {
    wx.showToast({
      title: 'aaaaaa',
    })
    boot();
  }
})




@jare

没有人有遇到这种情况吗

最新测试,项目模块设置中

移除所有模块只保留core,canvas, sprite, label, webgl renderer,发布微信小游戏,再game.js中进行http请求,ios真机依然闪退。

@jare 因为带着微信一起闪退,所以没办法确认异常点。

综合所有情况:如果请求在require(settings.debug ? ‘cocos2d-js.js’ : ‘cocos2d-js-min.js’)之前完成,或者main.js中 cc.game.run之后进行请求则不会闪退。否则在require引擎代码之后在game.js中调用,如图所示


则会闪退。

试试找到下面这个代码,然后添加这个修改,原本是微信的一个问题,可能微信还没修复。

后来测试,发现是webgl没有初始化就会出现闪退。和http请求没有关系。
所以我们将请求放在了cc.game.run的回调中。
能说明下这是什么原因导致的吗。
这个定时器的作用是啥。。。一脸懵逼啊。

遇到同样的问题,在game.js里加载子包ios微信小游戏会闪退,退回2.0.9引擎版本就不会。

这个问题,提了好几次,都大半年了,现在还是有哦