雖然現在的瀏覽器已經有很多種不同的系統,但若能開發一個量身訂做的瀏覽器時,在操作使用上會更得心應手吧!加上筆者最近寫了「開心農場瀏覽器」,因此就有些網友來信問說如何寫類似的程式。但是要從無到有開發出一個瀏覽器並不是簡單的事,不過若使用 .NET 內建的 WebBrowser 元件的話,保障在開發上能事半功倍。
一樣是先快速的把畫面排出來,這邊使用到 5 個 Button(按鈕) 來當做執行上一頁、下一頁、重新整理、停止及首頁用,接著再放上 Label(標籤)、TextBox(文字輸入框) 及 Button(按鈕) 用來讓使用者輸入網址後並前往用,當然最重要的 WebBrowser(瀏覽器) 可別忘記要一起放在 Form(表單) 上喔。
在放置 WebBrowser(瀏覽器) 的時候要注意一下,它的 Dock 屬性預設是 Fill,它可會是佔滿整個 Form(表單) 的,因此先把它設成 None 後再來手動調整大小及位置。畫面都排版好之後,就讓我們開始來 DIY 專屬瀏覽器囉。
首先當 WebBrowser(瀏覽器) 執行時,筆者希望預設能連到某網址,所以就咱們就要在 Form(表單) 載入時來做設定:
1 2 3 4 | private void Form1_Load(object sender, EventArgs e) { // 預設載入的頁面 webBrowser1.Navigate("http://abgne.tw"); } |
要讓 WebBrowser(瀏覽器) 連到某網址時可以用 Navigate(網址) 來執行動作。
接下來讓我們一口氣來完成上一頁、下一頁、重新整理、停止及首頁等功能:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | private void backBtn_Click(object sender, EventArgs e) { // 上一頁 webBrowser1.GoBack(); } private void forwardBtn_Click(object sender, EventArgs e) { // 下一頁 webBrowser1.GoForward(); } private void refreshBtn_Click(object sender, EventArgs e) { // 重新整理 webBrowser1.Refresh(); } private void stopBtn_Click(object sender, EventArgs e) { // 停止 webBrowser1.Stop(); } private void homeBtn_Click(object sender, EventArgs e) { // 首頁 webBrowser1.GoHome(); } |
透過 WebBrowser(瀏覽器) 內建方法就能輕鬆達到各種指令,像是回首頁也只是 GoHome() 就可以囉。但我們所使用的是 .NET 所提供的元件,因此這邊的首頁設定就是跟 IE 瀏覽器一樣的。
完成以上動作之後,再來要做的就是輸入要瀏覽的網址後並前往:
1 2 3 4 5 6 7 8 9 10 11 | private void goBtn_Click(object sender, EventArgs e) { // 前往網址輸入框中的網址 webBrowser1.Navigate(textBox1.Text); } private void textBox1_KeyUp(object sender, KeyEventArgs e) { // 如果在網址輸入框中按下 Enter 則前往網址輸入框中的網址 if(e.KeyCode == Keys.Enter) { webBrowser1.Navigate(textBox1.Text); } } |
當按下前往的 Button(按鈕) 後就能使用 Navigate(網址) 來連到輸入框中所輸入的網址;除了透過按鈕前往之外,使用者也可能直接輸入完網址後就直接按下 Enter 鈕,所以筆者也針對輸入框的 KeyUP 事件加上 Enter 鈕的判斷。
目前寫到這邊已經算是完成一個簡單且基本的瀏覽器了,但不知道各位有沒有注意到當我們瀏覽到不同網頁時,我們的輸入框中的網址並沒有跟著改變呢?!筆者希望當網頁改變並載入完後就顯示新的網址,所以我們得在 WebBrowser(瀏覽器) 的 DocumentCompleted 事件上加入指定的程式:
1 2 3 4 | private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { // 把目前的網址顯示在網址輸入框中 textBox1.Text = webBrowser1.Url.ToString(); } |
現在整個完成後,就是一個較完整的瀏覽器囉~
如果還要能控制網頁或是做一些能自動控制功能的話,當然得再這基礎上加上更多的程式功能才行。接下來會用實際的網頁範例來實做出來。
請問一下 要如何在使用者改變Form的大小後webBorwser button texlist 的大小也跟著變化?
可以在 resize 事件中透過 id 等等的方式來取得網頁中的元素並利用 css 等的方式來修改
如果開啟的網頁有整合AD,連結網頁時調出小視窗,需輸入AD的帳號密碼才能登入,請問這部分不知如何做?
這沒試過, 不過這時程式可能會因為這視窗而 hold 住了XD
請問一下,這個自製的瀏覽器,瀏覽有含javascript與flash的網站,應該都沒問題
怎麼會這個網站 http://www.guerrillamail.com
我不管用 Chrome 或 IE 來看,它有一個倒數計時器到會自動檢查是否有新信顯示出來
執行是沒問題的
但是這個自製的瀏覽器,卻一直都不執行這個方法,卻一直顯示"JavaScript没有启用...自动更新关闭."
讓我一直以為這個自製的瀏覽器不支援javascript
是不是這個自製的瀏覽器不支援網頁裡有AJAX或JQuery呢?
自製的是可以支援網頁中的 AJAX 及 jQuery 的, 畢竟這也都是 JavaScript 而已。
之前我做的一些網頁遊戲外掛也是用類似的方式, 我也是利用程式來呼叫及控制網頁中的 JavaScript。
想請問一下能控制網頁或是做一些能自動控制功能的範例不小得有沒有可能提供?
要找時間做才行, 之前的都寫的較多也較亂
範例檔案不在..
檔案已經補上了!
受益良多 謝謝
男丁格爾大
想請問一下
如何用WebBrowser 讀 PDF 跳頁
sfile="D:\windowsform-e-book\windowsform-e-book\pdfs\變形金剛3.pdf#page=10"
sfile1="D:\windowsform-e-book\windowsform-e-book\pdfs\變形金剛3.pdf#page=10"
webBrowser1.Url = new Uri(sfile);
webBrowser1.Navigate(sfile1);
不知道為什麼 跳頁只能一次
當我想第2次 第3次的時候
就會失敗 整個變灰
求救 拜託拜託
再把 URL 設成另一個新的 Uri 的話呢?
請問該怎麼讓網頁產生的跳窗在您寫的瀏覽器上執行呢?
撰寫分頁的概念是什麼呢?
煩請回覆,謝謝:)
你可以在 WebBrowser 的 NewWindow 事件中去取得新開視窗的網址等資訊, 接著就看你要怎麼處理囉!
請問該怎麼讀取網頁的彈跳視窗呢?
一樣使用NewWindow 事件中去處理嗎?
我現在登入進去的網頁會自動彈出一個要我按確認的視窗
我想讓他偵測到跳窗後按下Enter鍵
煩請回覆,謝謝:)
男丁格爾大大
請問該怎麼偵測網頁的跳窗呢?
你的跳窗是指跳出一個新的網頁視窗嗎?如果是的話, 就從 WebBrowser 的 NewWindow 事件來下手!!
男丁大大請問一下
如果用webbrowser 去控制網頁,這個網頁upload 一個XML
1.他是action=upload.dll method=post
2.html tag 他autocomplete=off
3.正常網頁操作,你點瀏覽檔案,會開啟檔案管理員,你選擇一個檔案之後就會把C:\1.xml 帶到FORM裏頭。如果我們要控制c:\1.xml 帶參數過去
可以做得到嗎? 謝謝大大
以網頁來說是不行, 會有安全性的問題!!
不過既然你都用 exe 來寫了, 怎麼不直接用程式將檔案 post 到指定的路徑呢?