栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在我创建的另一个窗口中显示来自WebBrowser的弹出窗口?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在我创建的另一个窗口中显示来自WebBrowser的弹出窗口?

Web浏览器控件支持NewWindow事件以获取有关弹出窗口的通知。但是,Winforms包装器不允许您做很多事情,只能取消弹出窗口。本机COM包装程序允许传递回Web浏览器的新实例,然后该实例将用于显示弹出窗口。

利用这一点需要做一些工作。对于初学者,请使用“项目+添加引用”的“浏览”选项卡,然后选择c: windows system32
shdocvw.dll。这就增加了对本机COM接口的引用。

创建一个充当弹出窗体的窗体。将WebBrowser放到它上面,并使它的代码类似于以下内容:

public partial class Form2 : Form {    public Form2() {        InitializeComponent();    }    public WebBrowser Browser {        get { return webBrowser1; }    }}

Browser属性提供对浏览器的访问,该浏览器将用于在弹出窗口中显示网页。

现在回到主要形式。将WebBrowser放到它上面,并使它的代码如下所示:

public partial class Form1 : Form {    public Form1() {        InitializeComponent();        webBrowser1.Url = new Uri("http://google.com");    }    SHDocVw.WebBrowser nativeBrowser;    protected override void onLoad(EventArgs e) {        base.onLoad(e);        nativeBrowser = (SHDocVw.WebBrowser)webBrowser1.ActiveXInstance;        nativeBrowser.NewWindow2 += nativeBrowser_NewWindow2;    }    protected override void onFormClosing(FormClosingEventArgs e) {        nativeBrowser.NewWindow2 -= nativeBrowser_NewWindow2;        base.onFormClosing(e);    }    void nativeBrowser_NewWindow2(ref object ppDisp, ref bool Cancel) {        var popup = new Form2();        popup.Show(this);        ppDisp = popup.Browser.ActiveXInstance;    }}

OnLoad方法获取对本机COM接口的引用,然后将事件处理程序订阅到NewWindow2事件。我确保在FormClosing事件处理程序中取消订阅该事件,而不是100%确定是否必要。更好的安全后悔。

NewWindow2事件处理程序是症结所在,请注意,第一个参数允许传回无类型的引用。那应该是弹出窗口中的本机浏览器。因此,我创建了一个Form2实例并对其进行Show()。注意Show()的参数,该参数确保弹出窗口是一个拥有的窗口。对于您的应用程序,将其替换为必需的,假设您要创建一个MDI子窗口。

请注意,当Javascript使用alert()时,此事件不会针对显示的窗口触发。浏览器不会将该窗口视为HTML弹出窗口,也不使用浏览器窗口来显示它,因此您无法截取或替换它。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/375369.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号