Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >以编程方式使用webview2在winforms c#中打开新选项卡上的弹出链接

以编程方式使用webview2在winforms c#中打开新选项卡上的弹出链接
EN

Stack Overflow用户
提问于 2022-08-11 21:02:26
回答 1查看 341关注 0票数 1

我在该webview中添加了选项卡控件,让我们考虑一下wv1,我在这个webview上打开一个pop链接,这个弹出链接将在新选项卡和新webview2上打开。

单击下面引用img 在运行代码wv1 on tab2映像后,尝试它按钮弹出链接将在新选项卡内的新webview2上打开

代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
namespace WindowsBrowserApplication
{
    public partial class WindowsWebView : Form
    {
        public WindowsWebView()
        {
            InitializeComponent();
        }

        private void WindowsWebView_Load(object sender, EventArgs e)
        {
            InitBrowser();
        }

        private async Task Initizated()
        {
            await WebView.EnsureCoreWebView2Async(null);
        }

        public async void InitBrowser()
        {
            await Initizated();
            WebView.CoreWebView2.Navigate("https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_win_open");
            WebView.CoreWebView2.NewWindowRequested += CoreWebView2_NewWindowRequested;
        }

        public async void InitBrowserTab()
        {
            await Initizated();
        }
        private void CoreWebView2_NewWindowRequested(object sender, CoreWebView2NewWindowRequestedEventArgs e)
        {
            e.Handled = true;

            InitBrowserTab();
            TabPage tpage = new TabPage();

            var web = new WebView2();
            tpage.Controls.Add(web);
            tabControl.TabPages.Add(tpage);
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2022-09-24 15:52:20

让它像真正的浏览器一样工作怎么样?简单地说,在一个新的Tab中打开。仅用几行代码;)

首先,创建一个从WebView2继承并在其中包含TabControl字段的新类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
internal class WebViewInTab:WebView2
{
    TabControl tabCtrl;

    public WebViewInTab(TabControl tabCtrl) :base()
        {
            Dock = DockStyle.Fill; // necessary for showing 
            this.tabCtrl = tabCtrl; // for adding new TabPage controls
            CoreWebView2InitializationCompleted += WebViewInTab_CoreWebView2InitializationCompleted;

然后,您将在每次引发CoreWebView2.NewWindowRequested事件时使用这个自定义webview2创建新的webview2对象。因此,要处理这个事件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private void WebViewInTab_CoreWebView2InitializationCompleted(object? sender, Microsoft.Web.WebView2.Core.CoreWebView2InitializationCompletedEventArgs e)
{
    CoreWebView2.NewWindowRequested += CoreWebView2_NewWindowRequested; // This is the man
    CoreWebView2.DocumentTitleChanged += CoreWebView2_DocumentTitleChanged; // Just cosmetic code
}

之后,您将自己处理新窗口,即只需将一个新的TabPage控件与我们的自定义webview2添加到TabControl TabPages集合中即可。当然,不要忘记处理程序arg中的Uri

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private void CoreWebView2_NewWindowRequested(object? sender, Microsoft.Web.WebView2.Core.CoreWebView2NewWindowRequestedEventArgs e)
    {
        e.Handled = true; // let the default new window 

        TabPage tpage = new TabPage(); // boy

        tpage.Controls.Add(new WebViewInTab(tabCtrl) { Source = new Uri(e.Uri)}); // toy

        tabCtrl.TabPages.Add(tpage); // daddy
        tabCtrl.SelectedTab = tpage; // user expectation
    }

//Just cosmetic code
private void CoreWebView2_DocumentTitleChanged(object? sender, object e)
    {
        int last = tabCtrl.TabPages.Count - 1;
        tabCtrl.TabPages[last].Text = CoreWebView2.DocumentTitle
    }
}

最后,:)在主app表单构造函数中启动recursion-ready操作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public Form1()
        {
            InitializeComponent();
            string uriAdd = "https://www.w3schools.com/";
            tabControl1.TabPages[0].Controls.Add(new WebViewInTab(tabControl1) { Source = new Uri(uriAdd) });
        }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73329442

复制
相关文章
python Tkinter按钮带参数
from Tkinter import * def cross(value):     text.insert(INSERT,'x') window =Tk() frame =Frame(window) frame.pack() text =Text(frame,height =3,width =10) text.pack() button=Button(frame,text="add",command = lambda:cross(text)) button.pack() window.mainl
py3study
2020/01/09
1.6K0
java:如何让程序按要求自行重启?
正文开始前的废话: 这里的程序即包括b/s的web application,也包括standalone的类c/s的java application。 为什么要自我重启? 场景1:分布式环境中,一般会有很多应用(即包括c/s的java application,又有b/s的web application)部署在不同的环境中,为了管理方便,通常会把一些公用的配置,比如:报警发邮件用的邮箱账号/密码/smtp信息,公用的ftp账号信息,甚至jdbc的连接串信息等,统一放在某个位置(共享的网络存储目录、redis缓存
菩提树下的杨过
2018/01/18
2.8K0
java:如何让程序按要求自行重启?
正文开始前的废话: 这里的程序即包括b/s的web application,也包括standalone的类c/s的java application。 为什么要自我重启? 场景1:分布式环境中,一般会有很多应用(即包括c/s的java application,又有b/s的web application)部署在不同的环境中,为了管理方便,通常会把一些公用的配置,比如:报警发邮件用的邮箱账号/密码/smtp信息,公用的ftp账号信息,甚至jdbc的连接串信息等,统一放在某个位置(共享的网络存储目录、redis缓存
菩提树下的杨过
2018/01/18
1.4K0
python开发_tkinter_单选按钮
E | hongtenzone@foxmail.com  B | http://www.cnblogs.com/hongten
Hongten
2018/09/13
1.5K0
python开发_tkinter_单选按钮
Python+tkinter动态创建与销毁组件小案例
本文代码演示了如何在tkinter窗体上动态创建组件以及销毁组件的方法。 import tkinter import tkinter.messagebox import tkinter.simpledialog btnList = [] # 动态创建组件,并计算组件在窗体上的位置 def place(n): for i in range(n): exec('btn'+str(i)+'=tkinter.Button(root,text='+str(i)+')') eval('btn'+str(i)).p
Python小屋屋主
2018/04/16
5.2K0
Python+tkinter动态创建与销毁组件小案例
对抗蠕虫 —— 如何让按钮不被 JS 自动点击
作者: EtherDream www.cnblogs.com/index-html/p/anti_xss_worm.html 前言 XSS 自动点按钮有什么危害? 在社交网络里,很多操作都是通过点击按钮发起的,例如发表留言。假如留言系统有 XSS,用户中招后除了基本攻击外,还能进行传播 —— XSS 自动填入留言内容,并模拟点击发表按钮,于是就能发布带有恶意代码的留言。好友看了中招后,又传播给他们的好友。。。从而形成蠕虫扩散。 那么有没有一种机制,让「发表留言」必须通过用户的「真实点击」按钮才能完成,而无
前端教程
2018/03/05
9.2K0
对抗蠕虫 —— 如何让按钮不被 JS 自动点击
python的tkinter编程(十)Radiobutton单选按钮,CheckButton复选按钮 的详细解读
Radiobutton单选按钮 CheckButton复选按钮
一写代码就开心
2020/11/20
1.9K0
python的tkinter编程(十)Radiobutton单选按钮,CheckButton复选按钮  的详细解读
SQVI-如何自行创建报表?
在项目实施过程中,SAP标准报表提供的功能不能满足一些特殊的需求,因而会有一些临时的报表需求,若开发人员临时写一个报表,需要开发测试过程,时间较长,此时,实施工程师可以使用SAP提供的SQVI功能,快速自定义一个自己需要的报表。
用户5495712
2019/11/07
1.1K0
SQVI-如何自行创建报表?
android让返回按钮失效
先发制人,后发制于人。——《汉书》 我们可以重写Activity中的onBackPressed方法去实现 例如 ...就是这样
阿超
2022/08/16
1K0
android让返回按钮失效
python的tkinter编程(一)什么是tkinter,第一个基于tkinter的GUI编程,弹出窗口,创建按钮,并且在这个按钮上面加点击事件
1 创建出一个窗口 2 在窗口上面布局组件 3 让各种各样的组件活起来,也就是让各个组件有事件
一写代码就开心
2020/11/20
2.8K0
python的tkinter编程(一)什么是tkinter,第一个基于tkinter的GUI编程,弹出窗口,创建按钮,并且在这个按钮上面加点击事件
PyQt5 技巧篇-如何让窗体只显示关闭按钮
默认我们的窗体的放大、缩小、关闭按钮都是显示的,想要个性化化显示,需要我们自己设置。
小蓝枣
2020/09/23
2.8K0
【tkinter系列 第十课 TopLevel窗口部件 】
python中通常我们写程序,显示结果和操作都是在终端区,如果要想实现一个有显示界面的程序那该怎样实现呢?python中有好几个库都可以实现,这个系列我们一起来学习如何使用python自带的tkinter库来实现。
叶子陪你玩
2020/03/11
3.5K0
如何正确的创建和销毁 Java 对象?
点击关注公众号,Java干货及时送达 一、介绍 Java由Sun Microsystems发明并在1995年发布,是世界上使用最广泛的编程语言之一。Java是一个通用编程语言。由于它拥有功能强大的库、运行时、简单的语法、平台无关(Write Once, Run Anywhere - WORA)以及令人敬畏的社区从而吸引了很多的开发者。 本系列文章我们我们将会覆盖一些高级的Java概念,我们假设你对Java语言已经有一些基础知识。本系列文章并不是一个完整的参考,而是一个将您的Java技能提升到下一个级别的详
Java技术栈
2022/05/27
1.9K0
如何正确的创建和销毁 Java 对象?
销毁MBProgressHUD
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/51065513
用户1451823
2018/09/13
9550
如何正确的创建和销毁 Java 对象
> 作者 : RonTech ,链接: blog.csdn.net/zyhlwzy/article/details/78937421
Java小咖秀
2021/04/28
2.9K0
如何正确的创建和销毁 Java 对象
如何正确的创建和销毁Java对象
blog.csdn.net/zyhlwzy/article/details/78937421
好好学java
2021/04/30
1.4K0
如何正确的创建和销毁Java对象
如何正确的创建和销毁 Java 对象?
Java由Sun Microsystems发明并在1995年发布,是世界上使用最广泛的编程语言之一。Java是一个通用编程语言。由于它拥有功能强大的库、运行时、简单的语法、平台无关(Write Once, Run Anywhere - WORA)以及令人敬畏的社区从而吸引了很多的开发者。
Spark学习技巧
2023/03/21
2.3K0
如何正确的创建和销毁 Java 对象?
点击加载更多

相似问题

如何使按钮自行销毁?

12

Python:如何销毁同名按钮(tkinter)

12

如何让tkinter按钮销毁/退出嵌套函数中的根窗口?

10

单击后销毁Tkinter按钮

214

单击后tkinter销毁按钮

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文