Creating a game in rust language I came across a problem with running it in Cordova. It turned out that the cargo web builder uses fetch api to download the wasm for the webassembly compiler, but cannot download from file: // in cordova.

The search for a sensible solution ended with the creation of a script overwriting the action of fetch api, so that the application uses XHR, which can download file: //.

 <body>
  <canvas id="canvas"></canvas>
  <script type="text/javascript" src="cordova.js"></script>
  <script>
    window.fetch = (url, info) => {
      return new Promise(function(resolve, reject) {
        let xhr = new XMLHttpRequest();
        xhr.open((info && info.method) || "GET", url);
        if (url.endsWith(".wasm")) xhr.responseType = "arraybuffer";

        xhr.onload = function() {
          if (this.status >= 200 && this.status < 300) {
            resolve({
              json: () => JSON.parse(xhr.response),
              ok: true,
              arrayBuffer: () => xhr.response
            });
          } else {
            reject({
              status: this.status,
              statusText: xhr.statusText
            });
          }
        };
        xhr.onerror = function() {
          reject({
            status: this.status,
            statusText: xhr.statusText
          });
        };
        xhr.send();
      });
    };
    WebAssembly.instantiateStreaming = undefined;
  </script>
  <script type="text/javascript" src="lines.js"></script>
</body>

The script should be added before importing the main application script.

Thanks to this solution, the Lines application is available in the Google Play Store.

https://play.google.com/store/apps/details?id=studiolacosanostra.game.lines