我正在创建一个角度应用程序的桌面版本,因为我正在使用电子。
打开主窗口非常简单:
win = new BrowserWindow({
width: 1280,
height: 720,
backgroundColor: '#ffffff',
icon: `file://${__dirname}/dist/assets/logo.png`
});
win.loadURL(`file://${__dirname}/dist/index.html`);
这将打开一个新窗口,解析为基本href路径,一切正常。
在我的应用程序中,我想利用电子提供覆盖窗口之类的东西,以非常紧凑的方式向用户显示信息。
为了做到这一点,我有一个页面可以渲染为覆盖(/alarms?overlay=true
),这要归功于路由器的queryParams绑定。
上面提到的所有内容都可以完美地使用浏览器,叠加层也可以,一切都很好。
要在电子上打开这个叠加层,我正在提供一个拨打ipc的按钮:
showOverlay(): void {
this.ipc.send('overlay', '/alarms');
}
这是来自IpcService的send方法(在上面的函数中名为ipc):
public send(channel: string, ...args: any[]): void {
if (this._ipc !== undefined) {
return this._ipc.send(channel, ...args);
}
}
另一方面的代码:
ipcMain.on('overlay', (event, url) => {
const overlayWindowConfig = {
height: 400,
width: 280,
resizable: true,
frame: false,
alwaysOnTop: true,
autoHideMenuBar: true,
webPreferences: {
nodeIntegration: false
}
};
const overlay = new BrowserWindow(overlayWindowConfig);
overlay.loadURL(`file://${__dirname}/dist/index.html#${url}?overlay=true`);
openedOverlays[url] = overlay;
});
正如您所看到的,我正在尝试直接在给定页面上打开一个新窗口,因此它可以只加载叠加而无需加载主页然后导航到警报(由于大小而会很难看覆盖窗口)。
./
。useHash: true
,因为我应该能够处理与file://
的深层链接。基本广告
将基本href设置为空(“”),因为我在github issue上看到它应该使用它。 *原来这个工作完美无需aot,构建应用程序时打开窗口打开时出现以下消息(在电子的devTools内):
错误:无法匹配任何路线。网址细分:'index.html'
这也打破了我的所有资源链接,因为他们尝试从dist/index.html/assets/
而不是dist/assets/
加载。
链接修改
我尝试通过在#
之前添加斜杠来更改已打开的链接,但没有更改任何内容。
现在,我正在构建我的电子应用程序而不是aot但这不是我想要用于我的发布的解决方案,能够通过深层链接从电子加载帧并且启用了aot是我需要的东西能够做到。
答案 0 :(得分:0)
我不确定我确切地知道问题的确切位置,但我认为您可以尝试实施与UrlSerializer
协议和文件名兼容的file:///
或至少检查DefaultUrlSerializer
实施