繁体   English   中英

电子-如何处理页面弹出窗口

[英]Electron - how to handle in page popups

在电子内部,我正在加载一个旧站点。

代码很简单: browserWindow.loadURL('https://myOldSite.com');

当用户单击按钮时,此旧站点将打开一个弹出窗口(例如<a target="_blank"...>甚至js window.open )。

弹出窗口打开时,我看到屏幕上闪烁着一些东西,但它没有保持打开状态。 我有两个问题:

  1. 有没有办法防止这种闪光?
  2. 有没有办法控制此弹出窗口并将其显示给用户? 还是以某种方式获取其URL?

首先,它应该按预期工作。 window.open<a target="_blank" ... > ...>都将打开一个新的电子BrowserWindow。

但是,您可以通过'new-window'事件主过程中操纵窗口打开过程:

myBrowserWindow.webContents.on('new-window', (event, url) => {
  event.preventDefault()
  const win = new BrowserWindow({show: false})
  win.once('ready-to-show', () => win.show())
  win.loadURL(url)
  event.newGuest = win
})

这个示例优雅地显示了新窗口,但是您可以使用可用的回调参数实现更多功能

一种解决方案是在创建BrowserWindow时使用preload选项。

文档中

preload String(可选)-指定将在页面中其他脚本运行之前加载的脚本。 无论打开还是关闭节点集成,此脚本始终可以访问节点API。 该值应该是脚本的绝对文件路径。 关闭节点集成后,预加载脚本可以将节点全局符号重新引入全局范围。 在这里查看示例。

您的预加载脚本可以在页面上搜索您提到的链接并更改其行为。 (即,将事件发送到您的主流程,而不是执行您喜欢的任何操作;打开一个窗口,等等。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM