[C#]如何讓webbrowser控件支持Html5


    最近因為項目的需要,需要研究在C#winform窗體中加載網頁,和彈出提醒,但我們的網站是HTML5的,ie瀏覽器內核不支持,而且因為根據客戶機系統的不一致,加載的ie內核可能是不同,顯示的效果也會不一致,在網上查詢了大量的資料,途中遇到了很多的問題。

 

    因為ie內核不支持html5,所以說得出的結論是webbrowser不能支持html5,但是我們可以用其他的內核。比如火狐的內核Gecko,或webkit內核,我從csdn上下載了版本為22的geckofx:地址:http://download.csdn.net/detail/w297088867/6361867

 

    里面有demo,經過測試,可以運行html5頁面,顯示的效果與目前最新版的360差不多。這樣就可以支持為網頁包一層外衣了,可是在后來的發現,當網頁中的附件鏈接,點擊無效,無法彈出下載保存對話框,對於這個問題,網上似乎沒有給出答案,再加上沒有js和C#通信的方法,火狐的內核就被擱置了。

 

    在這之后,我開始尋找關於webkit內核的相關資料,這時候我發現了一個叫open-webkit-sharp的東東,他對webkit進行了再次封裝,功能強大,而且博文中說了js和C#互調的辦法,雖然也存在無法下載附件的問題,但我想如果js可以調用C#,那么就簡單了,我可以自己寫個下載鏈接的方法來彈保存對話框。在綿陽網站建設在進過了很多嘗試,也無法讓源碼在我的機器上跑起來,萬般無奈下放棄。

 

    如果是webbrowser的js和C#互調,很簡單,可以看看這篇文章:http://www.myk3.com/arc-170.html

 

    后來在博客園看到了一個叫CefGlue的東東,也是對webkit的封裝,但是這里博主對於整個瀏覽器的開發做了比較深刻的描述,並且解決了下載附件彈出保存的問題,於是我采用了這個內核,看了這幾篇文章就能滿足C#winform對html5的支持了,需要的朋友可以搜索 ‘ 基於.net開發chrome核心瀏覽器’,目前有7篇文章,其中第四篇有源碼下載,比較完善了,解決了附件下載的問題和右鍵菜單和C#調用js的方法都有。

 

    到這里應該就完了,不過,我們還忽略了一個問題,是js調用C#的方法,這個方法在博文中沒有解決,不過小安查過資料,需要看這幾篇文章,這幾篇文章中的作者通過注冊js和C#的反射實現了js調用C#,需要了解的請搜索標題:‘Xilium CefGlue 關於 CLR Object 與 JS 交互類庫封裝報告’.

 

    如果你看了是否無法看懂,是有點難以理解,但是沒關系,他們提供了一個群號,我當時加入了進去,在群共享有個deme,演示js和C#互調的方法。不過他們這個demo直言是了js和C#的互調,對於文件下載的鏈接依然無效,需要修改一下文件,點擊打開demo工程文件,我們只用到了CefGlue和CefGlue.WindowsForms。打開CefGlue.WindowsForms,新建一個類,取名:BsLifeSpanHandler.cs

代碼如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
using  System.Threading.Tasks;
using  Xilium.CefGlue;
 
 
namespace  Xilium.CefGlue.WindowsForms
{
     public  class  BsLifeSpanHandler : CefLifeSpanHandler
     {
         private  CefWebClient bClient;
         public  BsLifeSpanHandler(CefWebClient bc)
         {
             bClient = bc;
         }
         protected  override  void  OnAfterCreated(Xilium.CefGlue.CefBrowser browser)
         {
             base .OnAfterCreated(browser);
             bClient.Created(browser);
         }
     }
}

 

    然后打開CefWebClient.cs文件,添加聲明

1
private  readonly  CefDownloadHandler downloadHandler;

    在構造函數中加入

1
downloadHandler =  new  BsDownloadHandler();

    然后添加一個方法名在文檔末尾

1
2
3
4
  protected  override  CefDownloadHandler GetDownloadHandler()
         {
             return  downloadHandler;
         }

    這樣就可以實現點擊文檔或附件自動彈出下載對話框了,同時又支持javascript和C#的調用。也就能支持絕大多數的客戶端開發了。

 

    效果圖來一發如下:

 

4.png

 

    對了,窗體做了自繪處理,這樣風格就差不多了。

 

    總結,支持Html5與WinForm客戶端結合開發,這樣大大的提升了效率,不用去使用winAPI自繪按鈕什么的,用網頁前段技術就可以做軟件了。

 

    源碼包有些大,這里就不上傳了,在博客園中的第四篇文章中有比較完整的源碼下載,二jsC#互調的demo在群里能下載,這里綿陽網站建設就不在累述。好了,文章寫到這里就基本上結束了,謝謝你的閱讀。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM