打包电子后XMLHttpRequest无法正常工作

时间:2019-01-30 12:42:20

标签: javascript xmlhttprequest electron

我有一个电子项目,该项目使用ffi-napi集成了一些cpp代码,并使用电子伪造/电子编译来打包应用程序。

当我运行“电子锻造启动”时,一切正常。

我的JavaScript使用XMLHttpRequest从自定义文件格式(* .awd)加载一些二进制数据。 XMLHttpRequest.responseType是“ arraybuffer”。

问题是,一旦我使用“ electron-forge软件包”并运行生成的应用程序,我的JavaScript中的XMLHttpRequest将不再按预期工作。它不会引发错误,但是XMLHttpRequest.result比应该的要小得多,因此二进制数据的解析失败。

这是我正在使用的电子伪造/电子编译的版本:

  "dependencies": {
    "electron-compile": "^6.4.4",
    "electron-squirrel-startup": "^1.0.0",
    "ffi-napi": "^2.4.4",
    "ref": "^1.3.5"
  },
  "devDependencies": {
    "babel-plugin-transform-async-to-generator": "^6.24.1",
    "babel-preset-env": "^1.7.0",
    "babel-preset-react": "^6.24.1",
    "electron-forge": "^5.2.4",
    "electron-prebuilt-compile": "4.0.0",
    "eslint": "^3.19.0",
    "eslint-config-airbnb": "^15.1.0",
    "eslint-plugin-import": "^2.15.0",
    "eslint-plugin-jsx-a11y": "^5.1.1",
    "eslint-plugin-react": "^7.12.4"
  }

在此方面的任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

我想我自己找到了解决方法。

问题出在“电子编译”模块上。运行“ electron-forge软件包”后,似乎在加载我的自定义二进制文件时出现干扰,并阻止了它们通过XMLHttpRequest正确加载。

该解决方案似乎使用了电子编译程序包附带的“ addBypassChecker”来忽略要由电子编译器重新编译的文件(如果它们不是应用程序的一部分)。

import { app } from 'electron';
import { addBypassChecker } from 'electron-compile';

addBypassChecker((filePath) => {
  return filePath.indexOf(app.getAppPath()) === -1;
});

更多信息在这里:

https://github.com/electron-userland/electron-compile/pull/199