我需要将网站转换为本地电子应用程序。网站的一部分从“资产”文件夹加载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文件和字体会加载到网站代码中。
答案 0 :(得分:0)
我的问题的答案是利用此方法打开fileURL,因为它成功打开了xlsx文件:
mainWindow.loadURL(url.format({
pathname:path.join(__dirname, 'dist/index.html'),
protocol:'file',
slashes: true
}));
并将“ / assets”的每个实例更改为“ assets”。这使css路径(以及其他所有路径)工作正常。