反H5代码打包成apk时遇到报错:Fetch API cannot load file:///a_asset/xxx.json. URL scheme "file" is not support。

原因是js里调用了fetch方法,而fetch api不支持file:///。  以下是fetch方法的替换文案:

function fetchLocal(url, data) {
  return new Promise(function(resolve, reject) {
    var xhr = new XMLHttpRequest
    xhr.onload = function() {
      resolve(new Response(xhr.responseText, {status: xhr.status}))
    }
    xhr.onerror = function() {
      reject(new TypeError('Local request failed'))
    }
    xhr.open('GET', url)
    xhr.send(data)
  })
}

如果是 arraybuffer, 则如下:

    function fetchLocal(url) {
    return new Promise(function (resolve, reject) {
        var xhr = new XMLHttpRequest
        xhr.onload = function () {
            resolve(new Response(xhr.response, { status: xhr.status }))
        }
        xhr.onerror = function () {
            reject(new TypeError('Local request failed'))
        }
        xhr.open('GET', url)
        xhr.responseType = "arraybuffer";
        xhr.send(null)
    })
};

还遇到另一个报错:Unable to open asset URL: file:///android_asset/www/

我遇到的原因是目录名称里有下划线,去掉下划线就可以了。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐