1

我有一个BrowserWindow带有预加载脚本的。

我想根据我加载的页面在预加载脚本中公开不同的内容。

在我的应用程序中,我加载页面 A 并导航到页面 B,或者我从头开始加载页面 B。

我正在考虑通过以下方式将其他参数传递给我的预加载:

{
    preload: "path_to_preload.js",
    additionalArguments: ["onPageB"]
}

然后我的预加载可以做到:

const onPageB = process.argv.find(arg => arg === "onPageB");

然后我根据页面 B 的需要设置我的预加载脚本。

但是,我的预加载脚本最初可以与页面 A 一起加载,因此onPageB将是false,然后即使我导航到页面 B,它也会卡在 false 状态。

我真正需要的是动态响应导航。(理想情况下,我将能够动态切换预加载脚本,但我认为这不受支持,或者从架构的角度来看是可能的)。

为了检测导航,通常我会这样做:

getMyWebContents().on("did-navigate", (e, url) => ...);

但我不能WebContents从渲染器进程中使用。

我显然可以通过 查询我在哪个页面上ipcRenderer.invoke,但我不能只在加载时这样做。当页面导航时我也需要这样做,这似乎表明我必须从主进程中检测到这一点,然后让我的预加载脚本知道这一点。

但我该怎么做。这里有executeJavaScript一个解决方案,我在预加载中调用一个函数来触发更改吗?不确定这是否会正常工作,甚至是一个好的解决方案。

4

1 回答 1

2

Electron 开发人员提到,每次导航都会重新执行预加载脚本(回顾起来很明显)。

因此,我们可以location.href在预加载中访问并找出我们在哪个页面上。

于 2021-04-14T01:04:06.873 回答