【问题标题】:Electron notifications don't bring app up to front again on click on the notification单击通知时,电子通知不会再次将应用程序置于最前面
【发布时间】:2024-01-09 06:49:01
【问题描述】:

我有一个电子应用程序,它只会包装一个远程页面,同时添加一些额外的功能。使用以下代码,页面加载并工作。当远程页面使用通知 API 触发一些通知时,这些通知会在电子应用程序最小化时显示。我的问题是,当单击这些通知时,应用程序不会像直接在任何其他浏览器上打开远程页面时那样被放在前面。我只能针对 Ubuntu 19.10 Linux (Gnome 3) 进行测试。

知道我是否需要为此配置一些东西,或者这是否是 Electron/Ubuntu/Gnome 的错误?

const {app, shell, BrowserWindow} = require('electron');

let mainWindow;

function createWindow () {
  // Create the browser window.
  mainWindow = new BrowserWindow({
    width: 1024,
    height: 786,
  });

  mainWindow.setMenu(null);
  mainWindow.setTitle('My app – Connecting…');
  mainWindow.loadURL('https://some.url.somwhere');


  // Emitted when the window is closed.
  mainWindow.on('closed', () => {
    mainWindow = null
  })
}

app.on('ready', createWindow);

【问题讨论】:

    标签: notifications electron


    【解决方案1】:

    首先,包装远程页面不是一个好主意,除非您真的知道自己在做什么,就像您被重定向到恶意页面一样,该页面有权在操作系统中运行代码。我建议阅读 this 以确保您的安全。

    其次,通知 HTML5 API(在渲染器中运行)和通知模块(在 main 中运行)都没有默认行为来在单击通知时将页面置于最前面,您必须自己添加此行为。

    因为您正在加载一个远程页面,您可能正在使用通知模块,因此它可以如下完成:

    notification = new Notification({title: "Message from: "+result[i].messageFrom,body: messagebody,icon: path.join(__dirname, 'assets','images','icon.png')})
    notification.show()
    
    
    notification.on('click', (event, arg)=>{
        mainWindow.moveTop()
        mainWindow.focus()
    })
    

    【讨论】:

    • 如果通知变量在远程应用程序代码中怎么办?
    最近更新 更多