如何在electron中创建一个新窗口时不让窗口获取到焦点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在electron中创建一个新窗口时不让窗口获取到焦点相关的知识,希望对你有一定的参考价值。

参考技术A 可以在游戏资料夹里设置窗口大小,也可以在游戏中设置窗口大小,也有一些窗口化工具可以下载,可以耐心地找一下。本回答被提问者采纳

调用 window.open 时如何在 WPF/WebView2 应用程序中创建自定义窗口?

【中文标题】调用 window.open 时如何在 WPF/WebView2 应用程序中创建自定义窗口?【英文标题】:How to create custom windows in a WPF / WebView2 application when window.open is called? 【发布时间】:2021-12-03 06:23:05 【问题描述】:

我有一个 Webview2 应用程序,它需要能够拦截 window.open 调用并以某种方式配置生成的窗口(例如,使其不可调整大小、无框、删除出现的默认位置栏等)。

到目前为止,我知道我需要拦截 NewWindowRequested 事件并将 EventArgsNewWindow 属性分配给新的 Webview2 控件,但是我无法让它工作,而且我没有'没有找到任何文档列出尝试这样做的示例。

我正在使用 WPF。

还请注意,我对 WPF 和 WebView2 都是新手,所以也许我正在做的事情完全没有意义。

这大概是我的代码:

public static async void CoreWebView2_NewWindowRequested(object sender, CoreWebView2NewWindowRequestedEventArgs e) 
    var obj = e.GetDeferral(); // I think I need to do this to ensure that the resulting window ends up as the return of window.open
    var win = new System.Windows.Window(); // create my WPF window
    var w = new WebView2(); // create my Webview control
    win.Content = w; // site the Webview control?

    await w.EnsureCoreWebView2Async(MainWindow.Webview.CoreWebView2.Environment);

    e.NewWindow = w.CoreWebView2;
    obj.Complete();

我看到的问题是EnsureCoreWebView2Async 返回的Task 永远不会完成。

我的设置是否正确?为什么EnsureCoreWebView2Async 不解析?

【问题讨论】:

试试:public async void CoreWebView2_NewWindowRequested 然后你可以await 但是async void 中的异常不会导致进程崩溃吗?我的意思是我想我可以用 try/catch 包装所有东西,但有点烦人;也许这就是我会做的。 @PoulBak async void 是专门为事件处理程序设计的,只能用于此目的。如果你不await,那就是“一劳永逸”。 @PoulBak 好的,我会更新我的代码。虽然它不能解决我的问题 @PoulBak 似乎调用win.Show() 使其工作并且任务完成 【参考方案1】:

看来我必须致电win.Show() 才能完成EnsureCoreWebView2Async Task

也许我真的只想在 webview 内容加载后才显示窗口,但这至少是一个好的开始。

【讨论】:

以上是关于如何在electron中创建一个新窗口时不让窗口获取到焦点的主要内容,如果未能解决你的问题,请参考以下文章

如何在javafx中创建一个弹出窗口[重复]

在新窗口 C++ 中创建线程

在 Electron 中创建新的浏览器窗口时将 node-integration 设置为 false 的结果是啥?

如何在 JavaFX 2.1 中创建模态窗口

从另一个 cmd.exe 提示符中创建一个新的 cmd.exe 窗口

如何在 MFC 中创建非交互式窗口