" />

欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在C#中 webbrowser的使用心得

 更新時間:2013年04月12日 17:25:03   投稿:jingxian  
最近用webbrowser做了個東西,期間有點小曲折,而且網(wǎng)上的解決方法也基本都是淺嘗輒止,特此在這里發(fā)一下同大家分享。

1.首先是屏蔽瀏覽器右鍵菜單的問題,
用以下代碼可以讓瀏覽器用自己的右鍵菜單:
tempBrowser.ContextMenuStrip = this.contextMenuStrip1;
tempBrowser.IsWebBrowserContextMenuEnabled = false;

但是很不幸,上面的代碼在有的機(jī)器上不起作用,開始以為是環(huán)境或者插件的問題,折磨了很久無果,后來把.net升級到4.0竟然解決了這個問題,估計就是微軟webbrowser控件的問題

2.屏蔽拷貝快捷鍵和截屏快捷鍵

        public bool PreFilterMessage(ref Message msg)
        {
            if (msg.Msg == WM_KEYDOWN || msg.Msg == WM_KEYUP)
            {
                StringBuilder sb = new StringBuilder(50);
                GetClassName(msg.HWnd, sb, 50);

                if (sb.ToString().ToLower() == "internet explorer_server")
                {
                    if ((Control.ModifierKeys == Keys.Control && (((Keys)msg.WParam.ToInt32() & Keys.KeyCode) == Keys.C)) || ((Keys)msg.WParam.ToInt32() & Keys.KeyCode) == Keys.PrintScreen || ((Keys)msg.WParam.ToInt32() & Keys.KeyCode) == Keys.Menu)
                    {
                        MessageBox.Show("當(dāng)前系統(tǒng)禁止內(nèi)容復(fù)制,如需系統(tǒng)內(nèi)部復(fù)制粘貼,請使用右鍵菜單的功能!", "屏蔽");
                        Clipboard.SetDataObject("null");
                        return true;
                    }
                }
            }

            return false;
        }

3.解決webbrowser遇到window.open無法打開頁面的問題
是因為打開頁面的url一般是通過myBrowser.StatusText來獲取的,但是window.open是無法獲取真正的url的,解決辦法就是在webbrowser的NewWindow事件特殊處理window.open的事件,獲取真正的url地址
            WebBrowser myBrowser = (WebBrowser)sender;
            TabPage mypage = (TabPage)myBrowser.Parent;
            string NewURL = "";
            string html = myBrowser.Document.ActiveElement.OuterHtml;
            string pattern = @"<button.*?onclick=.*\('(.*)'\).*";
            MatchCollection matches = Regex.Matches(html, pattern, RegexOptions.IgnoreCase);
            if (matches.Count == 1)
            {
                Match m = matches[0];
                Group g = m.Groups[1];
                if (g != null && g.Length > 0)
                {
                    string address = myBrowser.Url.Scheme + "://" + myBrowser.Url.Host + ":" + myBrowser.Url.Port + g.ToString();
                    NewURL = address.Replace("&amp;", "&");
                }
            }
            NewURL = string.IsNullOrEmpty(NewURL) ? myBrowser.StatusText : NewURL;


很遺憾這種方法只能適合一頁中只有一個window.open的情況,如果有多個window.open,我們可以用下面的方法:在webbrowser的DocumentCompleted中,if (mybrowser.DocumentText.IndexOf("window.open(") > -1),然后把所有window.open替換為window.location.href。但是后來發(fā)現(xiàn)系統(tǒng)執(zhí)行過這個過程之后,webbrowser的url會變成原來的url,不知道有沒有朋友能知道為什么。

4.屏蔽webbrowser拖拽網(wǎng)頁內(nèi)容到外部word等的問題
        private void tempBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            WebBrowser tempBrowser = (WebBrowser)sender;
            tempBrowser.Parent.Text = tempBrowser.DocumentTitle;
            HtmlElement ele = tempBrowser.Document.CreateElement("script");//新增
            ele.SetAttribute("type", "text/javascript");
            ele.SetAttribute("text", "document.body.ondragstart=function(){window.event.returnValue=false;};");
            tempBrowser.Document.Body.AppendChild(ele);
 }

  • C#反射調(diào)用拓展類方法實例代碼

    C#反射調(diào)用拓展類方法實例代碼

    這篇文章主要給大家介紹了關(guān)于C#反射調(diào)用拓展類方法的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-01-01
  • c# 實例——繪制波浪線(附源碼)

    c# 實例——繪制波浪線(附源碼)

    這篇文章主要介紹了c#如何繪制波浪線,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C#中ToString數(shù)據(jù)類型格式大全(千分符)

    C#中ToString數(shù)據(jù)類型格式大全(千分符)

    這篇文章主要介紹了C#中ToString數(shù)據(jù)類型格式大全 千分符,需要的朋友可以參考下
    2017-02-02
  • C#使用Monitor類實現(xiàn)線程同步

    C#使用Monitor類實現(xiàn)線程同步

    這篇文章介紹了C#使用Monitor類實現(xiàn)線程同步的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C#對稱加密與非對稱加密實例

    C#對稱加密與非對稱加密實例

    這篇文章主要介紹了C#對稱加密與非對稱加密實例,詳細(xì)分析了對稱加密與非對稱加密的原理與具體實現(xiàn)方法,具有一定的實用價值,需要的朋友可以參考下
    2014-10-10
  • 詳解c# 強(qiáng)制轉(zhuǎn)換和類型轉(zhuǎn)換

    詳解c# 強(qiáng)制轉(zhuǎn)換和類型轉(zhuǎn)換

    這篇文章主要介紹了c# 強(qiáng)制轉(zhuǎn)換和類型轉(zhuǎn)換的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下
    2020-10-10
  • C#繼承IList?接口的實現(xiàn)步驟

    C#繼承IList?接口的實現(xiàn)步驟

    C#中的IList<T>接口是.NET框架中的一種通用接口,它定義了一組在運(yùn)行時可以使用類型參數(shù)T的元素的集合,本文給大家介紹了C#繼承IList?接口的設(shè)計方法,文中通過代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • C#中的異常處理問題try catch finally

    C#中的異常處理問題try catch finally

    這篇文章主要介紹了C#中的異常處理問題try catch finally,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • C#獲取指定目錄最后寫入時間的方法

    C#獲取指定目錄最后寫入時間的方法

    這篇文章主要介紹了C#獲取指定目錄最后寫入時間的方法,涉及C#中LastWriteTime屬性的使用技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • 最新評論