最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#的WEBBROWSER與JS交互小結(jié)

 更新時間:2014年11月19日 09:30:01   投稿:shichen2014  
這篇文章主要介紹了C#的WEBBROWSER與JS交互方法,詳細講述了與頁面標簽的交互以及數(shù)據(jù)交互的方法,需要的朋友可以參考下

本文實例總結(jié)了C#的WEBBROWSER與JS交互的方法。分享給大家供大家參考。具體實現(xiàn)方法如下:

一、實現(xiàn)WebBrowser內(nèi)部跳轉(zhuǎn),阻止默認打開IE

1、引用封裝好的WebBrowserLinkSelf.dll實現(xiàn)

復制代碼 代碼如下:
public partial class MainWindow : Window
{
       private WebBrowser webBrowser = new WebBrowser();
 
       public MainWindow()
       {
           InitializeComponent();
 
            this.webBrowser.LoadCompleted += new LoadCompletedEventHandler(webBrowser_LoadCompleted);
 
           //使webbrowser寄宿于Label上,實現(xiàn)webborwser內(nèi)部跳轉(zhuǎn),不用IE打開
           Label lb = new Label { Content = webBrowser };
           WebBrowserHelper webBrowserHelper = new WebBrowserHelper(webBrowser);
           HelperRegistery.SetHelperInstance(lb, webBrowserHelper);
           webBrowserHelper.NewWindow += WebBrowserOnNewWindow;
           this.lbBrowserHost.Content = lb;
 
           // this.webBrowser.Navigate(new Uri("http://www.baidu.com", UriKind.RelativeOrAbsolute));
       }
 
       private void WebBrowserOnNewWindow(object sender, CancelEventArgs e)
       {
           dynamic browser = sender;
           dynamic activeElement = browser.Document.activeElement;
           var link = activeElement.ToString();
           this.webBrowser.Navigate(new Uri(link, UriKind.RelativeOrAbsolute));
           e.Cancel = true;
       }
}

2、引用com:Microsoft Internet Controls實現(xiàn)(參考MSDN:http://msdn.microsoft.com/en-us/library/system.windows.controls.webbrowser.aspx public partial class MainWindow : Window

復制代碼 代碼如下:
<em id="__mceDel">    {
        public MainWindow()
        {
            InitializeComponent();
            this.webBrowser1.Navigate(new Uri("http://www.baidu.com", UriKind.RelativeOrAbsolute));
            this.webBrowser1.LoadCompleted += new LoadCompletedEventHandler(webBrowser1_LoadCompleted);
 
        }
        private IServiceProvider serviceProvider;
        void webBrowser1_LoadCompleted(object sender, NavigationEventArgs e)
        {
            if (this.serviceProvider == null)
            {
                serviceProvider = (IServiceProvider)webBrowser1.Document;
                if (serviceProvider != null)
                {
                    Guid serviceGuid = new Guid("0002DF05-0000-0000-C000-000000000046");
                    Guid iid = typeof(SHDocVw.WebBrowser).GUID;
                    var webBrowserPtr = (SHDocVw.WebBrowser)serviceProvider
                        .QueryService(ref serviceGuid, ref iid);
                    if (webBrowserPtr != null)
                    {
                        webBrowserPtr.NewWindow2 += webBrowser1_NewWindow2;
                    }
                }
            }
        }
 
        private void webBrowser1_NewWindow2(ref object ppDisp, ref bool Cancel)
        {
            dynamic browser = this.webBrowser1;
            dynamic activeElement = browser.Document.activeElement;
            var link = activeElement.ToString();
            this.webBrowser1.Navigate(new Uri(link, UriKind.RelativeOrAbsolute));
            Cancel = true;
        }
 
        [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
        [Guid("6d5140c1-7436-11ce-8034-00aa006009fa")]
        internal interface IServiceProvider
        {
            [return: MarshalAs(UnmanagedType.IUnknown)]
            object QueryService(ref Guid guidService, ref Guid riid);
        }
    }
</em>

二、WebBrowser與JS的交互

1、與頁面標簽的交互

復制代碼 代碼如下:
//引用Microsoft.mshtml
 
 //1、添加一個html標簽到id為lg的div中
 HTMLDocument doc = (HTMLDocument)this.webBrowser.Document;
 IHTMLElement lbelem = doc.createElement("button");
 lbelem.innerText = "test";
 lbelem.style.background = "red";
 IHTMLDOMNode node = doc.getElementById("lg") as IHTMLDOMNode;
 node.appendChild(lbelem as IHTMLDOMNode);  
 
 //2、設置id為su的標簽value值和style
 //2.1 使用setAttribute
 HTMLDocument doc = (HTMLDocument)this.webBrowser.Document;
 IHTMLElement search = doc.getElementById("su");
 IHTMLDOMAttribute att = search.getAttribute("value") as IHTMLDOMAttribute;
 search.setAttribute("value", "百度一下");
 //search.click();
 search.style.display = "none";
 //2.2 使用outerHtml
 search.outerHTML = "<input id=\"su\" value=\"百度一下\" class=\"bg s_btn\" type=\"submit\" onclick=\"alert('百度一下');\" />";
 //2.3 使用IHTMLDOMAttribute
 IHTMLAttributeCollection attributes = (search as IHTMLDOMNode).attributes as IHTMLAttributeCollection;
 foreach (IHTMLDOMAttribute attr in attributes)
 {
     if (attr.nodeName == "value")
     {
         attr.nodeValue = "百度一下";
     }
 }
 
//3、替換應用了類樣式mnav的a標簽
 HTMLDocument doc = (HTMLDocument)this.webBrowser.Document;
 IHTMLElementCollection collect = doc.getElementsByTagName("a");
 foreach (IHTMLElement elem in collect)
 {
     if (!(elem is IHTMLUnknownElement) && elem.className != null)
     {
         if (elem.className.Equals("mnav", StringComparison.OrdinalIgnoreCase))
         {
             elem.outerHTML = "<a href='#' title='替換標簽' >替換</a>";
         }
     }
 }
 
 //4、刪除節(jié)點
 HTMLDocument doc = (HTMLDocument)this.webBrowser.Document;
 IHTMLElement search = doc.getElementById("su");
 IHTMLDOMNode node = search as IHTMLDOMNode;
 node.parentNode.removeChild(node);
 
 //5、JS事件
 //5.1 添加JS
 HTMLDocument doc = (HTMLDocument)this.webBrowser.Document;
 IHTMLElement search = doc.getElementById("su");
 search.outerHTML = "<input id=\"su\" value=\"百度一下\" class=\"bg s_btn\" type=\"submit\" onclick=\"onClick();\" />";
 IHTMLScriptElement scriptErrorSuppressed = (IHTMLScriptElement)doc.createElement("script");
 scriptErrorSuppressed.type = "text/javascript";
 scriptErrorSuppressed.text = "function onClick(){ alert('添加js'); }";
 IHTMLElementCollection nodes = doc.getElementsByTagName("head");
 foreach (IHTMLElement elem in nodes)
 {
     var head = (HTMLHeadElement)elem;
     head.appendChild((IHTMLDOMNode)scriptErrorSuppressed);
 }
 //5.2 刪除JS
 IHTMLElementCollection scripts = (IHTMLElementCollection)doc.getElementsByName("script");
 foreach (IHTMLElement node in scripts)
 {
     if (!(node is IHTMLUnknownElement))
     {
         IHTMLScriptElement script = node as IHTMLScriptElement;
         //刪除所有js文件引用
         if (string.IsNullOrEmpty(script.text))
         {
             IHTMLDOMNode remove = script as IHTMLDOMNode;
             remove.parentNode.removeChild(remove);
         }
     }
 }
 
 //6、write new html
 mshtml.IHTMLDocument2 doc2 = this.webBrowser.Document as mshtml.IHTMLDocument2;
 doc2.clear();
 doc2.writeln("<HTML><BODY>write new html</BODY></HTML>");

2、數(shù)據(jù)交互

復制代碼 代碼如下:
public MainWindow()
    {
        InitializeComponent();
        this.webBrowser.ObjectForScripting = new ScriptEvent();
        this.webBrowser.NavigateToString(@"<html><head><title>Test</title></head><body><input type=""button"" value=""點擊"" onclick=""window.external.ShowMessage('百度一下');"" /></body></html>");
    }
 
[System.Runtime.InteropServices.ComVisible(true)]
public class ScriptEvent
{
    //供JS調(diào)用
    public void ShowMessage(string message)
    {
        MessageBox.Show(message);
    }
}

希望本文所述對大家的C#程序設計有所幫助。

相關(guān)文章

  • C# 顯示、隱藏窗口對應的任務欄

    C# 顯示、隱藏窗口對應的任務欄

    WPF中全屏窗口,會自動隱藏任務欄,那非全屏窗口如何隱藏任務欄?甚至有沒有一種場景,隱藏任務后自定義一套系統(tǒng)任務欄來顯示?這篇文章主要介紹了C# 顯示、隱藏窗口對應的任務欄,需要的朋友可以參考下
    2021-10-10
  • WPF使用觸發(fā)器需要注意優(yōu)先級問題解決

    WPF使用觸發(fā)器需要注意優(yōu)先級問題解決

    本文主要介紹了WPF使用觸發(fā)器需要注意優(yōu)先級問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • C#中的延時函數(shù)sleep

    C#中的延時函數(shù)sleep

    這篇文章主要介紹了C#中的延時函數(shù)sleep用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 在C#中基于Semantic?Kernel的檢索增強生成(RAG)實踐記錄

    在C#中基于Semantic?Kernel的檢索增強生成(RAG)實踐記錄

    SemanticKernel是一個用于集成和操作大語言模型的應用程序框架,支持C#、Python和Java等多種編程語言,通過SemanticKernel,開發(fā)者可以輕松構(gòu)建基于最新AI技術(shù)的應用程序
    2024-10-10
  • 在類庫或winform項目中打開另一個winform項目窗體的方法

    在類庫或winform項目中打開另一個winform項目窗體的方法

    這篇文章主要介紹了在類庫或winform項目中打開另一個winform項目窗體的方法,可以實現(xiàn)Winform項目間窗體的調(diào)用,在進行Winform項目開發(fā)中非常具有實用價值,需要的朋友可以參考下
    2014-11-11
  • C#實現(xiàn)窗體與子線程的交互的方法

    C#實現(xiàn)窗體與子線程的交互的方法

    這篇文章主要介紹了C#實現(xiàn)窗體與子線程的交互的方法,對初學者有一定的學習借鑒價值,需要的朋友可以參考下
    2014-08-08
  • C#實現(xiàn)QQ郵箱發(fā)送郵件

    C#實現(xiàn)QQ郵箱發(fā)送郵件

    今天小編就為大家分享一篇關(guān)于C#實現(xiàn)QQ郵箱發(fā)送郵件,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 利用MySqlBulkLoader實現(xiàn)批量插入數(shù)據(jù)的示例詳解

    利用MySqlBulkLoader實現(xiàn)批量插入數(shù)據(jù)的示例詳解

    MySQLBulkLoader是MySQL?Connector/Net類中的一個類,用于包裝MySQL語句。本文將利用MySqlBulkLoader實現(xiàn)批量插入數(shù)據(jù)功能,感興趣的可以了解一下
    2022-06-06
  • C# 實現(xiàn)Distinct將對象按條件去重

    C# 實現(xiàn)Distinct將對象按條件去重

    這篇文章主要介紹了C# 實現(xiàn)Distinct將對象按條件去重,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • C# Winform實現(xiàn)導入和導出Excel文件

    C# Winform實現(xiàn)導入和導出Excel文件

    這篇文章主要為大家詳細介紹了C# Winform實現(xiàn)導入和導出Excel文件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12

最新評論

监利县| 温宿县| 甘泉县| 友谊县| 松滋市| 东明县| 合阳县| 米脂县| 隆昌县| 营山县| 永胜县| 东源县| 汽车| 通辽市| 石首市| 沅江市| 正蓝旗| 基隆市| 开鲁县| 玉门市| 荆州市| 吉木萨尔县| 浦北县| 滦南县| 梁河县| 调兵山市| 盖州市| 长丰县| 镇巴县| 日喀则市| 普格县| 屏边| 黎城县| 夏邑县| 宁化县| 巨野县| 赤壁市| 石楼县| 龙口市| 丰镇市| 齐河县|