欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
C# webBrowser禁止在新窗口打開(kāi),強制在本窗口打開(kāi)

原文地址:http://blog.chinaunix.net/space.php?uid=16242888&do=blog&id=142736


進(jìn)行webBrower開(kāi)發(fā)的時(shí)候,肯定都會(huì )遇到一個(gè)問(wèn)題。
那就是怎么樣強制在本窗口打開(kāi)新窗口的問(wèn)題。
網(wǎng)上最常見(jiàn)的解決方法就是,
在NewWindow事件中取得要打開(kāi)的網(wǎng)址,取消打開(kāi)新窗口,然后在本窗口打開(kāi)要轉向的網(wǎng)址
  1. p rivate void webBrowser_1_NewWindow(object sender, CancelEventArgs e)
  2. {
  3. WebBrowser webBrowser_temp = (WebBrowser)sender;
  4. string newUrl = webBrowser_temp.Document.ActiveElement.GetAttribute("href");
  5. webBrowser_1.Url = new Uri(newUrl);
  6. e.Cancel = true;
  7. }

  雖然這種方法能夠解決大部分的要求,但是治標不治本。
而且當網(wǎng)址里面還有漢字的時(shí)候就更加麻煩了,比如在百度MP3,歌曲名字都是漢字,和百度空間里面,大部分用戶(hù)名都是漢字,所以取的網(wǎng)址都用亂碼。雖然,可以對網(wǎng)址進(jìn)行編碼,但是并不是所有網(wǎng)頁(yè)都是uft-8編碼,對于如何得知網(wǎng)頁(yè)的編碼又是一個(gè)課題了。

最根本的方法就是重寫(xiě)了。
新建一個(gè)類(lèi)

 

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;

  4. namespace webTestRecorder
  5. {

  6.     public class ExtendedWebBrowser : System.Windows.Forms.WebBrowser
  7.     {
  8.         System.Windows.Forms.AxHost.ConnectionPointCookie cookie;
  9.         WebBrowserExtendedEvents events;

  10.         //This method will be called to give you a chance to create your own event sink

  11.         protected override void CreateSink()
  12.         {
  13.             //MAKE SURE TO CALL THE BASE or the normal events won't fire

  14.             base.CreateSink();
  15.             events = new WebBrowserExtendedEvents(this);
  16.             cookie = new System.Windows.Forms.AxHost.ConnectionPointCookie(this.ActiveXInstance, events, typeof(DWebBrowserEvents2));
  17.         }

  18.         protected override void DetachSink()
  19.         {
  20.             if (null != cookie)
  21.             {
  22.                 cookie.Disconnect();
  23.                 cookie = null;
  24.             }
  25.             base.DetachSink();
  26.         }

  27.         //This new event will fire when the page is navigating

  28.         public event EventHandler<WebBrowserExtendedNavigatingEventArgs> BeforeNavigate;
  29.         public event EventHandler<WebBrowserExtendedNavigatingEventArgs> BeforeNewWindow;

  30.         protected void OnBeforeNewWindow(string url, out bool cancel)
  31.         {
  32.             EventHandler<WebBrowserExtendedNavigatingEventArgs> h = BeforeNewWindow;
  33.             WebBrowserExtendedNavigatingEventArgs args = new WebBrowserExtendedNavigatingEventArgs(url, null);
  34.             if (null != h)
  35.             {
  36.                 h(this, args);
  37.             }
  38.             cancel = args.Cancel;
  39.         }

  40.         protected void OnBeforeNavigate(string url, string frame, out bool cancel)
  41.         {
  42.             EventHandler<WebBrowserExtendedNavigatingEventArgs> h = BeforeNavigate;
  43.             WebBrowserExtendedNavigatingEventArgs args = new WebBrowserExtendedNavigatingEventArgs(url, frame);
  44.             if (null != h)
  45.             {
  46.                 h(this, args);
  47.             }
  48.             //Pass the cancellation chosen back out to the events

  49.             cancel = args.Cancel;
  50.         }
  51.         //This class will capture events from the WebBrowser

  52.         class WebBrowserExtendedEvents : System.Runtime.InteropServices.StandardOleMarshalObject, DWebBrowserEvents2
  53.         {
  54.             ExtendedWebBrowser _Browser;
  55.             public WebBrowserExtendedEvents(ExtendedWebBrowser browser) { _Browser = browser; }

  56.             //Implement whichever events you wish

  57.             public void BeforeNavigate2(object pDisp, ref object URL, ref object flags, ref object targetFrameName, ref object postData, ref object headers, ref bool cancel)
  58.             {
  59.                 _Browser.OnBeforeNavigate((string)URL, (string)targetFrameName, out cancel);
  60.             }

  61.             public void NewWindow3(object pDisp, ref bool cancel, ref object flags, ref object URLContext, ref object URL)
  62.             {
  63.                 _Browser.OnBeforeNewWindow((string)URL, out cancel);
  64.             }

  65.         }
  66.         [System.Runtime.InteropServices.ComImport(), System.Runtime.InteropServices.Guid("34A715A0-6587-11D0-924A-0020AFC7AC4D"),
  67.         System.Runtime.InteropServices.InterfaceTypeAttribute(System.Runtime.InteropServices.ComInterfaceType.InterfaceIsIDispatch),
  68.         System.Runtime.InteropServices.TypeLibType(System.Runtime.InteropServices.TypeLibTypeFlags.FHidden)]
  69.         public interface DWebBrowserEvents2
  70.         {

  71.             [System.Runtime.InteropServices.DispId(250)]
  72.             void BeforeNavigate2(
  73.                 [System.Runtime.InteropServices.In,
  74.                 System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.IDispatch)] object pDisp,
  75.                 [System.Runtime.InteropServices.In] ref object URL,
  76.                 [System.Runtime.InteropServices.In] ref object flags,
  77.                 [System.Runtime.InteropServices.In] ref object targetFrameName, [System.Runtime.InteropServices.In] ref object postData,
  78.                 [System.Runtime.InteropServices.In] ref object headers,
  79.                 [System.Runtime.InteropServices.In,
  80.                 System.Runtime.InteropServices.Out] ref bool cancel);
  81.             [System.Runtime.InteropServices.DispId(273)]
  82.             void NewWindow3(
  83.                 [System.Runtime.InteropServices.In,
  84.                 System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.IDispatch)] object pDisp,
  85.                 [System.Runtime.InteropServices.In, System.Runtime.InteropServices.Out] ref bool cancel,
  86.                 [System.Runtime.InteropServices.In] ref object flags,
  87.                 [System.Runtime.InteropServices.In] ref object URLContext,
  88.                 [System.Runtime.InteropServices.In] ref object URL);

  89.         }
  90.     }

  91.     public class WebBrowserExtendedNavigatingEventArgs : System.ComponentModel.CancelEventArgs
  92.     {
  93.         p rivate string _Url;
  94.         public string Url
  95.         {
  96.             get { return _Url; }
  97.         }

  98.         p rivate string _Frame;
  99.         public string Frame
  100.         {
  101.             get { return _Frame; }
  102.         }

  103.         public WebBrowserExtendedNavigatingEventArgs(string url, string frame)
  104.             : base()
  105.         {
  106.             _Url = url;
  107.             _Frame = frame;
  108.         }
  109.     }
  110. }

然后把webBrowser換成我們重寫(xiě)的ExtendedWebBrowser,添加事件處理

  1. ieBrowser = new ExtendedWebBrowser();
  2. ieBrowser.BeforeNewWindow += new EventHandler<WebBrowserExtendedNavigatingEventArgs>(ieBrowser_BeforeNewWindow);

 

然后在其BeforeNewWindow事件中:

  1. void ieBrowser_BeforeNewWindow(object sender, WebBrowserExtendedNavigatingEventArgs e) {
  2.      e.Cancel=true;
  3.      ((ExtendedWebBrowser)sender).Navigate(e.Url);
  4. }

---------------------另一方案下下----------------------

 

要解決這個(gè)問(wèn)題,可以使用下面的方法:

在日常的開(kāi)發(fā)中,大家有時(shí)需要用WebBrowser加載URL,來(lái)實(shí)現某些功能。而這時(shí),我們就不希望所打開(kāi)的頁(yè)面中的鏈接,在新窗口中打開(kāi),因為這樣的話(huà),實(shí)際上是用系統默認的瀏覽器打開(kāi)了,從而脫離了你的WebBrowser,也就不能被你所控制了。

假設WebBrowser的Name是 webBrowser1

 

  1. ******* void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)

  2. { //將所有的鏈接的目標,指向本窗體


  3. foreach (HtmlElement archor in this.webBrowser1.Document.Links)

  4. {

  5. archor.SetAttribute("target", "_self");

  6. } //將所有的FORM的提交目標,指向本窗體 foreach (HtmlElement form in this.webBrowser1.Document.Forms){ form.SetAttribute("target", "_self"); }}


  7. ******* void webBrowser1_NewWindow(object sender, CancelEventArgs e){ e.Cancel = true;}

 

記得將 WebBrowser 的 AllowWebBrowserDrop 設為 false

將 WebBrowser 的 WebBrowserShortcutsEnabled 設為 false

將 WebBrowser 的 IsWebBrowserContextMenuEnabled 設為 false

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
ystem.Runtime.InteropServices.COMException (0x800A1066): 命令失敗
Re: How to disable flash content in webbrowser control?
在C#中調用Excel
System.Runtime.InteropServices.COMException (0x800A141F): Word 無(wú)法讀取文檔,文檔可能損壞。
佐爾
javascript與Windows Presentation Foundation交互通訊(js與WPF通訊)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久