如何在网站代码中格式化文件系统路径,我需要移植到电子版

时间:2019-08-24 02:01:36

标签: electron

我需要将网站转换为本地电子应用程序。网站的一部分从“资产”文件夹加载Excel文件。这是加载xlsx文件的代码:

SimpleXL.load("/assets/data/List.xlsx", printJSON)

最初,我在使用网站上的字体和其他文件时遇到很多麻烦。我做了一些挖掘,发现这段代码解决了大多数问题:

 function createWindow() {
 const WEB_FOLDER = 'web';
 const PROTOCOL = 'file';

 electron.protocol.interceptFileProtocol(PROTOCOL, (request, callback) => {
  let url = request.url.substr(PROTOCOL.length + 1);

  url = path.join(__dirname, WEB_FOLDER, url);

  url = path.normalize(url);

  console.log(url);
  callback({path: url});
});

mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
  nodeIntegration: false
}
});

mainWindow.loadURL(url.format({
pathname: 'index.html',
protocol: PROTOCOL + ':',
slashes: true
}));`

所有其他文件似乎仅起作用,在加载xlsx文件时,“ interceptFileProtocol”方法会拦截该调用并将URL更改为: C:\ electron \ list \ dist \ assets \ data \ List.xlsx 这是正确的,但是,在电子应用程序中,错误为: main.bundle.js?92b99b2442c75f3217f1:8 GET file:///assets/data/List.xlsx net :: ERR_FILE_NOT_FOUND

似乎应用程序正在使用在网站javascript中硬编码的“ /assets/data/List.xlsx”路径。

当我将呼叫更改为: SimpleXL.load("assets/data/List.xlsx", printJSON)

xlsx文件未加载。

当我将loadURL调用修改为:xlsx文件确实加载时: mainWindow.loadURL(url.format({ pathname:path.join(__dirname, 'dist/index.html'), protocol:'file', slashes: true }));

仅此更改导致不再加载字体。

我希望XLSX文件和字体会加载到网站代码中。

1 个答案:

答案 0 :(得分:0)

我的问题的答案是利用此方法打开fileURL,因为它成功打开了xlsx文件:

 mainWindow.loadURL(url.format({
 pathname:path.join(__dirname, 'dist/index.html'),
     protocol:'file',
 slashes: true
 }));

并将“ / assets”的每个实例更改为“ assets”。这使css路径(以及其他所有路径)工作正常。