WebBrowser响应页面中的blank开新窗口及window.close关闭本窗体
生活随笔
收集整理的這篇文章主要介紹了
WebBrowser响应页面中的blank开新窗口及window.close关闭本窗体
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
注:本文適用.net 2.0+的winform項目
目的:
- 點擊頁面中的target="_blank"鏈接時,彈出新窗體
- 頁面中有window.close()操作時,關閉窗體
上述窗體是指WebBrowser所在的Form,基本上,上述目的就是讓該窗體表現得像個正常瀏覽器而已。
一、彈出新窗體
WebBrowser(下稱wb)自帶NewWindow事件,所以直接注冊該事件即可:
private void wb_NewWindow(object sender, CancelEventArgs e) {e.Cancel = true;//這句加不加在我的環境里沒區別,不加也不會導致打開外部瀏覽器new FmWebBrowser(wb.StatusText).Show(); //FmWebBrowser即我的承載wb的窗體,本類構造函數接受一個url,Show之后會令wb訪問該url。另外,該事件進入時,wb的StatusText幾乎可以斷定就是所點鏈接的href,極端情況以后遇到再說 }二、響應頁面中的window.close以關閉本窗體
由于wb沒有現成的Close之類的事件,所以這個要稍稍折騰一下,就是給它加上這個事件,核心要解決的問題,就是讓wb知道頁面執行了window.close(),解決了這個,剩下就是把這事通知出去而已。
方法是網上抄的,原理是頁面執行window.close()時wb會收到一個特定的win32消息,于是可以重載wb的WndProc方法來處理這個消息,這就需要繼承wb寫一個子類,子類如下:
using System; using System.Security.Permissions; using System.Windows.Forms;namespace AhDung.WinForm.Controls {/// <summary>/// 增強型瀏覽器/// </summary>public class WebBrowserEx : WebBrowser{/// <summary>/// 當WebBrowser關閉后/// </summary>public event EventHandler WindowClosed;protected void OnWindowClosed(EventArgs e){if (WindowClosed != null) { WindowClosed(this, e); }}[PermissionSet(SecurityAction.LinkDemand, Name = "FullTrust")]protected override void WndProc(ref Message m){if (m.Msg == 0x210/*WM_PARENTNOTIFY*/){int wp = m.WParam.ToInt32();int X = wp & 0xFFFF;if (X == 0x2/*WM_DESTROY*/)//若收到該消息,引發WindowClosed事件{OnWindowClosed(EventArgs.Empty);}}base.WndProc(ref m);}} }-
總結
以上是生活随笔為你收集整理的WebBrowser响应页面中的blank开新窗口及window.close关闭本窗体的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# Task的简单使用
- 下一篇: 安逸花手速不够快是怎么回事