使用file:// with a

时间:2018-05-18 20:17:19

标签: angular electron

上下文

我正在创建一个角度应用程序的桌面版本,因为我正在使用电子。

打开主窗口非常简单:

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;
});

正如您所看到的,我正在尝试直接在给定页面上打开一个新窗口,因此它可以只加载叠加而无需加载主页然后导航到警报(由于大小而会很难看覆盖窗口)。

配置

  • 路由器基础href设置为./
  • 路由器位置策略在电子版中设置为useHash: true,因为我应该能够处理与file://的深层链接。

已经尝试

基本广告

将基本href设置为空(“”),因为我在github issue上看到它应该使用它。  *原来这个工作完美无需aot,构建应用程序时打开窗口打开时出现以下消息(在电子的devTools内):

  

错误:无法匹配任何路线。网址细分:'index.html'

这也打破了我的所有资源链接,因为他们尝试从dist/index.html/assets/而不是dist/assets/加载。

链接修改

我尝试通过在#之前添加斜杠来更改已打开的链接,但没有更改任何内容。

现在,我正在构建我的电子应用程序而不是aot但这不是我想要用于我的发布的解决方案,能够通过深层链接从电子加载帧并且启用了aot是我需要的东西能够做到。

1 个答案:

答案 0 :(得分:0)

我不确定我确切地知道问题的确切位置,但我认为您可以尝试实施与UrlSerializer协议和文件名兼容的file:///或至少检查DefaultUrlSerializer实施