日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

WebBrowser响应页面中的blank开新窗口及window.close关闭本窗体

發布時間:2024/9/20 windows 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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(),解決了這個,剩下就是把這事通知出去而已。

  • 讓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);}} }
  • 剩下就簡單了,宿主窗體響應WebBrowserEx的WindowClosed事件,關閉自身就好。當然首先要把之前的WebBrowser換成上述WebBrowserEx,代碼段: private WebBrowserEx wbex = new WebBrowserEx(); ...public FmMain() {wbex.WindowClosed += wbex_WindowClosed;... }void wbex_WindowClosed(object sender, System.EventArgs e) {this.Close(); }
  • -

    總結

    以上是生活随笔為你收集整理的WebBrowser响应页面中的blank开新窗口及window.close关闭本窗体的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。