【问题标题】:Electron: Prevent middle click电子:防止中间点击
【发布时间】:2017-06-15 22:31:24
【问题描述】:

在 Electron 中,可以使用以下命令在 Web 浏览器中打开链接,而不是在 Electron 中使用 left click

const {shell} = require('electron')
function openUrl(e) {
    var e = window.e || e;
    if (e.target.localName == 'a') {
        e.preventDefault();
        shell.openExternal(e.target.href);
    }
}
window.addEventListener('click', openUrl, false);

但是,click 不适用于 middle mouse 按钮。 mousedownmouseup 在新的 Electron 窗口和网络浏览器中打开链接(可能是因为它在创建新的 Electron 窗口后触发)。

如何停止在 Electron 中打开带有 middle click 的新 Electron 窗口的链接?

【问题讨论】:

    标签: javascript electron


    【解决方案1】:

    您必须使用auxclick (https://developer.mozilla.org/en-US/docs/Web/Events/auxclick) 它处理所有非左键单击,并且是通过鼠标中键创建电子窗口的关键事件。此代码用于预加载脚本中的 render 进程或启用 nodeIntegration

    const { shell } = require('electron')
    
    function auxclickHandler(event) {
        if (e.target.localName == 'a') {
            event.preventDefault();
            shell.openExternal(url);
        }
    }
    
    document.addEventListener('auxclick', callback, false)
    

    如果您想将任何类型的链接重定向到内部浏览器,替代。此代码用于主进程

    这里有一个电子小提琴https://gist.github.com/Hammster/ce4fac29deaf3600665d9534e3a32317

    const { shell } = require('electron')
    
    mainWindow.webContents.on('new-window', function (event, url) {
        event.preventDefault()
        shell.openExternal(url)
    })
    

    【讨论】:

    • 这个解决方案现在不起作用 electron v6.0.9
    • 刚才用电子小提琴测试了它,它在 6.0.9 和 6.0.10 上工作。您确定将此代码添加到渲染脚本中吗?
    • 如果我们点击 iframe 组件内的链接,新窗口仍会显示看到这个fiddle
    • I 框架是独立运行的,遗憾的是,您根本无法使用远程页面更改这一点(因为 CORS)。我的解决方案也没有考虑到这一点,我正在添加一个涵盖任何链接重定向的替代方案。
    • @FreddyDaniel 您可以使用新示例进行一般链接处理:)
    猜你喜欢
    • 2021-10-24
    • 2021-07-04
    • 2021-08-09
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    相关资源
    最近更新 更多