【轉】C# 開發Chrome內核瀏覽器(WebKit.net)

WebKit.net是對WebKit的.Net封裝,使用它.net程序能夠很是方便的集成和使用webkit做爲加載網頁的容器。這裏介紹一下怎麼用它來顯示一個網頁這樣的一個最簡單的功能。javascript

第一步:

下載WebKit.net 的bin文件。別小看這一步,你不必定能下載成功,緣由你懂的。css

WebKit.net 的主頁是http://webkitdotnet.sourceforge.net/html

直接下載0.5版本的windows bin文件地址爲:https://sourceforge.net/projects/webkitdotnet/files/WebKit%20.NET%200.x/0.5/WebKit.NET-0.5-bin-cairo.zip/downloadhtml5

第二步:

新建一個WindowsForms工程。java

image

而後把下載好的webkit.net bin目錄下的全部文件複製到新建工程的bin/Debug/目錄下。css3

添加引用,經過瀏覽添加對「WebKitBrowser.dll」的引用。web

image

第三步:

來寫寫代碼了。雙擊Form1的窗體進入代碼,寫下這幾行代碼:c#

 private void Form1_Load(object sender, EventArgs e)
        {
            WebKit.WebKitBrowser browser = new WebKitBrowser();
            browser.Dock = DockStyle.Fill;
            this.Controls.Add(browser);
            browser.Navigate("http://www.lixin.me");
        }

運行看看效果:windows

李鑫的我的主頁

與IE內核的WebBrowser對比:

很是簡單的三步就完成了。但是話說回來了,時下都流行一步到位的,例如使用System.Windows.Forms.WebBrowser 。瀏覽器

使用.Net框架自帶的,調用IE內核的WebBrowser來顯示網頁也許更簡單些,只須要在新建的工程中寫下這麼幾行代碼即可:

  private void Form1_Load(object sender, EventArgs e)
        {
            WebBrowser browser = new WebBrowser();
            browser.Dock = DockStyle.Fill;
            this.Controls.Add(browser);
            browser.Navigate("http://www.lixin.me");   
        }

運行起來的效果看起來差很少,肉眼基本只能看出字體稍微不一樣而已:

image

既然都差很少,那爲何還不厭其煩的去下載幾個M的dll來顯示網頁呢?這是由於若是使用IE內核的WebBrowser咱們沒法預知對網頁的顯示效果,例如你的電腦是xp,可能會調用ie6做爲加載器,若是是win7,可能會調用ie8做爲加載器,而他們的顯示效果是不徹底同樣的。下面用一個例子來看看。

http://css3.zxq.net/doraemon/doraemon_css3.html 這個頁面是用來測試瀏覽器對css3的支持程度的。如今咱們分別用2個方法來顯示這個頁面。

 private void Form1_Load(object sender, EventArgs e)
        {
            WebBrowser browser = new WebBrowser();
            browser.Dock = DockStyle.Fill;
            browser.Navigate("http://css3.zxq.net/doraemon/doraemon_css3.html");
            splitContainer1.Panel1.Controls.Add(browser);

            WebKit.WebKitBrowser kitBrowser = new WebKitBrowser();
            kitBrowser.Dock = DockStyle.Fill;
            kitBrowser.Navigate("http://css3.zxq.net/doraemon/doraemon_css3.html");
            splitContainer1.Panel2.Controls.Add(kitBrowser);
        }

效果圖以下:

image

本機的系統是win7+IE9,可是經過WebBrowser調用,估計仍然使用的是IE8內核,因此顯示效果不好。

經過這樣左右對比,能夠看出多了一步麻煩,是有必要的。

from:http://www.cnblogs.com/linyijia/p/4045333.html

/***********************************************************************/

問:下載了一個第三方的內核瀏覽器插件webkit.net(版本是2011),調用網頁中的js函數報錯:對 COM 組件的調用返回了錯誤 HRESULT E_FAIL,不知道是由於缺乏文件仍是其餘緣由?webkit插件怎麼調用網頁上的js函數呢?拜託各位

 

答:花費了一些時間算是解決了總結一下結論,方便他人。

當須要在客戶端顯示網頁時就要考慮用到瀏覽器插件,一個是MS的webbrowser,另外一個好用的是webkit內核的第三方插件(webkit.net,google的open-webkit-sharp,作手機用的qtwebkit,Firefox的Geoko引擎的Windows Forms包裝),webbrowser基本上能夠知足須要,可是有一些問題很差解決,好比:IE六、七、8差別性大,用戶不一樣的機器安裝的IE內核不一樣,網頁的兼容性,js腳本,不支持html5元素的網頁等;使人開心的是老外分享有開源的第三方瀏覽器插件(下載地址:http://sourceforge.net/projects/webkitdotnet/      一直沒有更新最新版本2011),webkit.net能夠很好的解決了上面的問題,使用跟webbrowser同樣方便,提供的類方法也是很相似,減小學習成本能夠很快的上手;其餘的幾個插件也是能夠的,open-webkit-sharp目前更新版本3.0,完善和更新了bug,不過複雜的配置安裝過程,全英文的文檔,網上也有不少這方便的資料,有時間的或者有必要能夠選擇這個。

webkit.net調用js函數:

//webKitBrowser1.DocumentText =
// "<html><head><title>Test Page</title></head><body>" +
// "<p id=\"testelement\" style=\"color: red\">Hello, World!</p>" +
// "<div><p>A</p><p>B</p><p>C</p></div>" +
// "<script type=\"text/javascript\">" +
// "function f() { window.open('http://www.google.com', 'myWindow'); }</script>" +
// "</body></html>";
webKitBrowser1.IsScriptingEnabled = true;//啓用js函數調用
string str = webKitBrowser1.StringByEvaluatingJavaScriptFromString("Test()");//參數跟webbrowser有點不同,方法名加括號,測試時不要直接alert,好像沒顯示出來

兩句代碼,js函數定義到須要調用的網頁裏面,或者直接嵌入一段js也能夠,好比上面註釋的部分。

from:http://q.cnblogs.com/q/50344/   

/**********************************************************************************/

c#winform中使用WebKit傳遞js對象實現與網頁交互

有個項目要使用WebBroswer控件,而且要能傳遞一個js對象供前臺調用,用c#的WebBroswer控件很容易實現:

[csharp]  view plain copy
 
  1. private void Form1_Load(object sender, EventArgs e)  
  2. {  
  3.     WebBrowser wb = new WebBrowser();                      
  4.     wb.ObjectForScripting = new myClass();              
  5. }  
[csharp]  view plain
  1. private void Form1_Load(object sender, EventArgs e)  
  2. {  
  3.     WebBrowser wb = new WebBrowser();                      
  4.     wb.ObjectForScripting = new myClass();              
  5. }  

要傳遞的js對象必須使用[ComVisibleAttribute]標記爲COM 可見:

[csharp]  view plain copy
 
  1. [System.Runtime.InteropServices.ComVisibleAttribute(true)]  
  2. class myClass  
  3. {  
  4.     public void Test()  
  5.     {  
  6.         System.Windows.Forms.MessageBox.Show("alert:Test");  
  7.     }  
  8. }  
[csharp]  view plain
  1. [System.Runtime.InteropServices.ComVisibleAttribute(true)]  
  2. class myClass  
  3. {  
  4.     public void Test()  
  5.     {  
  6.         System.Windows.Forms.MessageBox.Show("alert:Test");  
  7.     }  
  8. }  

這樣前臺就能使用window.external調用myClass的方法: window.external.Test();

若是就這樣那就簡單了 ,可恰恰項目使用的網站對IE的兼容性極差(吐槽下:我的以爲是IE太爛了,對標準的支持太差),無奈之下想找尋其餘相似的WebBrowser控件,發現幾個不錯的替換控件:

  1. GeokoFx:一個Firefox的Geoko引擎的Windows Forms包裝,google上的下載地址:http://code.google.com/p/geckofx/ 官網:http://www.geckofx.org/
  2. WebKit.NET:webkit的.NET封裝,下載地址:http://sourceforge.net/projects/webkitdotnet/


原本決定使用GeokoFx,由於項目使用的網站用火狐打開是很快的,可是我找了幾天資料也沒發現怎麼傳遞個js對象給控件,當發現Qt的webbroswer控件也是封裝的WebKit控件時,遂決定使用WebKit,但WebKit.NET也沒有直接提供傳遞對象的方法,後來發現又一個好東西:

  1. open-webkit-sharp:對webkit.net的又一次封裝,提供了不少新功能。google上下載地址:http://code.google.com/p/open-webkit-sharp/

下面的使用就很是簡單了,下載open-webkit-sharp後,把Core文件夾和References文件夾下全部文件拷貝到你的工程目錄下,而後打開你的項目,添加引用OpenWebKitSharp.dll和WebKit.Interop.dll(若是你的項目運行在.NET Framework 2.0 或 3.5 引用 Binary_NET2文件夾下的這兩個文件,NET4.0的話就引用Binary文件夾下的這兩個dll);而後就是工具箱->選擇項->選擇OpenWebKitSharp.dll,而後從工具箱中把WebKitBrowser拖到你的窗體上.如今已經成功了一大步了,可是爲了不使用時遇到各類錯誤,咱們須要先安裝兩個支持文件:

  1. Microsoft C++ 2005 Redistributable http://www.microsoft.com/download/en/details.aspx?id=26347Windows XP/Vista/7 32/64 Bit
  2. Apple QuickTime (Optional - for better HTML5 Support) 

Ready!開始傳遞對象:

[csharp]  view plain copy
 
  1. private void Form1_Load(object sender, EventArgs e)  
  2. {  
  3.     this.webKitBrowser1.Navigate("http://yourWebSiteUrl");  
  4.     this.webKitBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webKitBrowser1_DocumentCompleted);  
  5. }  
  6. void webKitBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)  
  7. {  
  8.     this.webKitBrowser1.GetScriptManager.ScriptObject = new myClass();  
  9. }  
[csharp]  view plain
  1. private void Form1_Load(object sender, EventArgs e)  
  2. {  
  3.     this.webKitBrowser1.Navigate("http://yourWebSiteUrl");  
  4.     this.webKitBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webKitBrowser1_DocumentCompleted);  
  5. }  
  6. void webKitBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)  
  7. {  
  8.     this.webKitBrowser1.GetScriptManager.ScriptObject = new myClass();  
  9. }  

前臺調用方式相似IE的webbroswer,也使用window.external調用,你也能夠本身定義一個對象:

[csharp]  view plain copy
 
  1. this.webKitBrowser1.GetScriptManager.EvaluateScript("var obj=window.external;");  
[csharp]  view plain
  1. this.webKitBrowser1.GetScriptManager.EvaluateScript("var obj=window.external;");  

這樣調用的時候就能用你本身定義的對象名訪問了。

應該也有直接本身定義對象的方法,可是open-webkit-sharp中文的資料實在的很少,耐着性子看了幾天老外的論壇,一水的全是吐槽,實際解決問題的很少。等有更好的方法,也請你們不吝賜教。

 

轉載  http://blog.csdn.net/jallymn/article/details/8271671

李民權

from :http://blog.csdn.net/lyflcear/article/details/10055293

 

文章乃參考、轉載其餘博客所得,僅供本身學習做筆記使用!!!
相關文章
相關標籤/搜索