现在在将其标记为重复之前,我知道有那些:
我已经仔细阅读了所有内容,并对其中的一些内容进行了评论,但是似乎没有一种解决方法适用。
所以我有这个电子应用程序,并且在一个.html文件中,我链接了另一个脚本,该脚本为该程序提供了一些实用功能,其中一个是这个功能:
case message.(Message)
因此,这应该使用集成的Electron PDF Viewer(使用Chromium)在新窗口中打开PDF。我使用了臭名昭著的function openPDF(filePath){
let pdfWindow = new electron.remote.BrowserWindow({
icon: './build/icon.png',
width: 1200,
height: 800,
webPreferences: {
plugins: true
}
});
pdfWindow.loadURL(url.format({
pathname: filePath,
protocol: 'file:',
slashes: true
}));
pdfWindow.setMenu(null);
pdfWindow.on("closed", function () {
pdfWindow = null
});
}
,我尝试了大部分thousands of preferences you can define for a BrowserWindow,但是它总是打开窗口,然后开始下载文件而不显示它。
我三重检查了文件路径,“导入”等,更新了所有内容,但似乎找不到问题。自1.6.4起,Electron本身就支持此功能,但对我而言不起作用。
帮我,堆栈溢出,您是我唯一的希望。
答案 0 :(得分:9)
@karthick正确地指出,尽管有plugins: true
,这是一个禁用插件的错误。它存在since 3.0.0,今天有待修复:Issue on GitHub。
更新19年3月: A fix is on the way。我会不断更新这个答案。
更新May'19::上述修复程序目前处于等待better extension support的状态。
知道这一点后,我可以通过降级到最新的2.X.X使其成功运行。为此,您必须在项目文件夹中的devDependencies
中更改package.json
。
"devDependencies": {
"electron": "^2.0.18"
},
或者,您可以调用系统打开文件。它将选择分配给PDF的默认程序:
shell.openItem(fullPath);
请确保始终使用fullPath
之类的东西正确解析路径(path.resolve(app.getAppPath(), filePath)
),因为在构建应用程序时路径可能会更改。