亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#的WEBBROWSER與JS交互小結

2020-01-24 02:15:53
字體:
來源:轉載
供稿:網友

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

一、實現WebBrowser內部跳轉,阻止默認打開IE

1、引用封裝好的WebBrowserLinkSelf.dll實現

復制代碼 代碼如下:
public partial class MainWindow : Window
{
       private WebBrowser webBrowser = new WebBrowser();
 
       public MainWindow()
       {
           InitializeComponent();
 
            this.webBrowser.LoadCompleted += new LoadCompletedEventHandler(webBrowser_LoadCompleted);
 
           //使webbrowser寄宿于Label上,實現webborwser內部跳轉,不用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實現(參考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、刪除節點
 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、數據交互

復制代碼 代碼如下:
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調用
    public void ShowMessage(string message)
    {
        MessageBox.Show(message);
    }
}

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本一区二区在线播放| 欧美黄色www| 国产欧美在线观看| 国产精品视频网址| 日韩在线视频播放| 日韩av第一页| xvideos亚洲| 亚洲天堂免费视频| 精品日韩美女的视频高清| 欧美成人合集magnet| 欧美亚州一区二区三区| 亚洲国产91色在线| 正在播放国产一区| 亚洲精品成a人在线观看| 一本色道久久88综合亚洲精品ⅰ| 国产欧美最新羞羞视频在线观看| 日本成人精品在线| 亚洲人成免费电影| 国产精品久久久精品| 91麻豆桃色免费看| 狠狠躁夜夜躁人人爽超碰91| 亚洲精品视频在线播放| 日本一本a高清免费不卡| 久久在线观看视频| 日韩精品一区二区视频| 欧美老女人xx| 欧美一区二区大胆人体摄影专业网站| 欧美日韩视频在线| 欧美精品久久久久久久久久| 亚洲激情小视频| 亚洲精品一区二三区不卡| 久久99亚洲精品| 欧日韩在线观看| 亚洲综合在线做性| 91色视频在线观看| 久久久精品久久| 久久人人爽亚洲精品天堂| 中文字幕无线精品亚洲乱码一区| 国产精品久久久久秋霞鲁丝| 一区二区三区四区精品| www国产亚洲精品久久网站| 久久久久日韩精品久久久男男| 国产日韩综合一区二区性色av| 在线一区二区日韩| 欧美日韩精品在线视频| 国产91精品久久久久久久| 亚洲国产精品久久久久秋霞不卡| 欧美激情中文网| 成人激情在线观看| 欧美激情三级免费| 欧美激情一区二区久久久| 亚洲精品www| 国产精品十八以下禁看| 国产精品永久免费视频| 亚洲三级黄色在线观看| 亚洲美女av在线| 亚洲jizzjizz日本少妇| 最近2019中文免费高清视频观看www99| 在线日韩中文字幕| 国产性色av一区二区| 欧美—级高清免费播放| 日韩专区在线播放| 有码中文亚洲精品| 国产精品久久久久久久久久新婚| 国产综合在线看| 亚洲欧美在线第一页| 成人国产精品日本在线| 久久91精品国产91久久跳| 欧美一级高清免费播放| 成人国内精品久久久久一区| 欧美日韩国产999| 国产成人精品在线| 日韩欧美福利视频| 精品国产精品自拍| 亚洲人成电影在线观看天堂色| 亚洲人成自拍网站| 亚洲夜晚福利在线观看| 日韩欧美国产高清91| 欧美日韩一区二区免费在线观看| 国产91av在线| 久久精品国产96久久久香蕉| 97精品一区二区视频在线观看| 国产成人精品久久二区二区91| 亚洲最大av网站| 成人自拍性视频| 日本久久中文字幕| 2018中文字幕一区二区三区| 日韩在线观看网址| 欧美xxxx综合视频| 97精品视频在线观看| 日韩在线观看免费全| 欧美人在线视频| 亚洲精品福利免费在线观看| 日韩精品免费综合视频在线播放| 日本一欧美一欧美一亚洲视频| 国产视频精品免费播放| 精品久久久久久国产| 在线国产精品播放| 亚洲欧洲一区二区三区在线观看| 欧美日韩亚洲一区二区三区| 成人国产精品色哟哟| 久久午夜a级毛片| 国产精品嫩草视频| 超碰日本道色综合久久综合| 国产精品精品视频一区二区三区| 精品一区二区三区四区| 欧美在线视频在线播放完整版免费观看| 国产98色在线| 激情懂色av一区av二区av| 91精品成人久久| 一本色道久久88综合日韩精品| 国产精品一区二区性色av| 91国内产香蕉| 亚洲一区二区三区成人在线视频精品| 国产精品美女在线| 国产女人精品视频| 91中文精品字幕在线视频| 欧美日本中文字幕| 亚洲xxxx3d| 国产精品高潮视频| 国产精品福利小视频| 亚洲成成品网站| 九九久久精品一区| 欧美另类69精品久久久久9999| 久99九色视频在线观看| 成人午夜两性视频| 久久久精品亚洲| 欧美日韩国产综合视频在线观看中文| 久久久久久有精品国产| 国产精品久久久久久久av大片| 日韩综合视频在线观看| 亚洲午夜精品久久久久久久久久久久| 永久免费毛片在线播放不卡| 2019中文字幕全在线观看| 欧美性生交大片免网| 国产在线观看精品| www亚洲欧美| 精品在线小视频| 久久久久99精品久久久久| 在线成人激情黄色| 88国产精品欧美一区二区三区| 国产精品精品久久久久久| 国产精品免费视频久久久| 亚洲夜晚福利在线观看| 日韩av在线高清| 欧美专区在线视频| 亚洲综合视频1区| 日韩中文字幕免费| 亚洲色图av在线| 亚洲**2019国产| 日韩精品中文字幕在线观看| 国产精品欧美久久久| 亚洲日本成人网| 国产精品视频xxx| 亚洲成人在线视频播放| 欧美激情手机在线视频| 亚洲高清久久网| 欧美丝袜一区二区| 国产69精品久久久久9| 亚洲激情自拍图| 久久久亚洲成人| 日韩亚洲欧美中文高清在线| 国产精品99久久久久久久久久久久| 亚洲韩国欧洲国产日产av|