雖然現在的瀏覽器已經有很多種不同的系統,但若能開發一個量身訂做的瀏覽器時,在操作使用上會更得心應手吧!加上筆者最近寫了「開心農場瀏覽器」,因此就有些網友來信問說如何寫類似的程式。但是要從無到有開發出一個瀏覽器並不是簡單的事,不過若使用 .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(); } |
現在整個完成後,就是一個較完整的瀏覽器囉~
如果還要能控制網頁或是做一些能自動控制功能的話,當然得再這基礎上加上更多的程式功能才行。接下來會用實際的網頁範例來實做出來。
男丁格爾..你有沒有msn?
可以在msn說??
在VB中使用WebBrowser物件讀取網頁,我希望等待網頁讀取完成,再讓程式繼續執行
你可以教我??
webBrowser 都會有個 complete 的事件, 在這寫你要的程式就可以了!
complete 的事件..可以說多一點???
多謝你~我都會了,,另外我想問一問,,
我的想法是這樣的
首先WebBrowser1.Navigate(到我要的網址)
然後WebBrowser1.Document.GetElementById("xxxxxx").SetAttribute("value", TextBox1.Text))
WebBrowser1.Document.GetElementById("xxxxxxx").InvokeMember("click")
運行是可以,,但是..如果我的網路慢了,他就會出現錯誤
我想問問,,可以先偵測到WebBrowser1中網址讀取完成..之後先運行?
我在網上看了其他的例子
While Not WebBrowser1.ReadyState = WebBrowserReadyState.Complete
Application.DoEvents()
End While
這是不是等待網頁讀取完成?
基本上是的,但當網頁圖片要載很久或是失連時, 你可以能額外寫判斷來處理。
額外寫判斷來處理,,我不會寫..可以說多一點??
你可以如我e-mail / msn 等..聯絡方法?
我有很多問題想問..只有你會回答我,,其他的網都不回我T_T
其實你可以先試做看看, 除非網頁有問題, 不然是都ok的!
好了,,ok了
另外..我可問一問
我是用vb2008寫的
寫好的程式,,可以開啟無限次
我只想開一次..可以怎樣做?
可以參考看看: http://stackoverflow.com/quest......eate-a-single-instance-application
嗯嗯..我明白了^^
另外我想問一問,我想寫一個,到期的時間
我的想法是:程式會到某一個日子之後,,就不可以再用
可以教我?
除非程式用來判斷的時間是從網路上的主機來抓, 否則使用者調整本機時間不就又可以繼續執行了。
男丁大您好
我照著你的方法寫
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
webBrowser1.Navigate(textBox1.Text);
}
}
但是當我按下Enter以後,電腦就只會"登登登"叫
我把Enter換成Escape,End...等件都是一樣的結果
想請問是哪裡出了問題呢@@?
你的輸入焦點有在輸入框中嗎?
如何從網頁原始碼得知欄位的名稱,有類似的範例可以分享嗎?謝謝
如果你的目標網頁是固定的話, 那最簡單的方式就是自己先透過原始碼來確認
否則得依其它判斷規則來處理
請問WebBrowser1.Navigate要如何用if判斷,都說非選擇性根本不能用if
例如我想按下按鈕判斷目前是不是在這個網頁
WebBrowser1.Navigate ("http://tw.yahoo.com/")
要如何才能辦到呢?
有幾種方式啦, 像是可以用 webBrowser1.Url.ToString() 取得現在網址字串後, 你再用字串的方式來判斷