C# 簡單Web瀏覽器GUI 源代碼

//ChromeWebBrowser.net - Chrome //下載 //https://sourceforge.net/projects/chromewebbrowse/files/ //http://blog.csdn.net/lllllllllluoyi/article/details/28716653 //http://webkit.org/ //http://www.chromium.org/blink //GeckoWebBrowser - Firefox //下載 //https://code.google.com/p/geckofx/ //https://developer.mozilla.org/en-US/docs/Mozilla/Gecko //http://www.cnblogs.com/zhuo/archive/2010/03/19/1690237. //html //http://blog.sina.com.cn/s/blog_4c7ae2a801015h0r.html // 需要手工添加對 "System.Web" 的引用 using System; using System.Text; using System.Windows.Forms; using System.Security.Permissions; using System.IO; using System.Web; using System.Net; namespace BrowserasIE { [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] public partial class Form1 : Form { public Form1(string url) { InitializeComponent(); // 打開用戶主頁. // 以下事件在設計器中不可見. webBrowser1.CanGoBackChanged += new EventHandler(webBrowser1_CanGoBackChanged); webBrowser1.CanGoForwardChanged += new EventHandler(webBrowser1_CanGoForwardChanged); webBrowser1.DocumentTitleChanged += new EventHandler(webBrowser1_DocumentTitleChanged); webBrowser1.StatusTextChanged += new EventHandler(webBrowser1_StatusTextChanged); if (url == string.Empty) webBrowser1.GoHome(); else webBrowser1.Navigate(url); } private void saveAsToolStripMenuItem_Click(object sender, EventArgs e) { webBrowser1.ShowSaveAsDialog(); } private void pageSetupToolStripMenuItem_Click(object sender, EventArgs e) { webBrowser1.ShowPageSetupDialog(); } private void printToolStripMenuItem_Click(object sender, EventArgs e) { webBrowser1.ShowPrintDialog(); } private void printPreviewToolStripMenuItem_Click(object sender, EventArgs e) { webBrowser1.ShowPrintPreviewDialog(); } private void propertiesToolStripMenuItem_Click(object sender, EventArgs e) { webBrowser1.ShowPropertiesDialog(); } private void toolStripTextBox1_Click(object sender, EventArgs e) { toolStripTextBox1.SelectAll(); } private void toolStripTextBox1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { Navigate(toolStripTextBox1.Text); } } private void goButton_Click(object sender, EventArgs e) { Navigate(toolStripTextBox1.Text); } private void Navigate(String address) { if (String.IsNullOrEmpty(address)) return; if (address.Equals("about:blank")) return; if (address.IndexOf(".") > 0) { if (!address.StartsWith("http://") && !address.StartsWith("https://")) { address = "http://" + address; } try { webBrowser1.Navigate(new Uri(address)); } catch (System.UriFormatException) { return; } } else { string uri = "https://www.bing.com/search?q=" + HttpUtility.UrlEncode(toolStripTextBox1.Text, Encoding.UTF8); HttpWebRequest request = (HttpWebRequest) HttpWebRequest.Create(uri); HttpWebResponse response = (HttpWebResponse) request.GetResponse(); Stream stream = response.GetResponseStream(); StreamReader readerstream = new StreamReader(stream, Encoding.UTF8); webBrowser1.DocumentText = readerstream.ReadToEnd(); readerstream.Close(); stream.Close(); toolStripTextBox1.Text = uri; webBrowser1.Url = new Uri(uri); } } private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e) { toolStripTextBox1.Text = webBrowser1.Url.ToString(); } private void backButton_Click(object sender, EventArgs e) { webBrowser1.GoBack(); } private void webBrowser1_CanGoBackChanged(object sender, EventArgs e) { backButton.Enabled = webBrowser1.CanGoBack; } private void forwardButton_Click(object sender, EventArgs e) { webBrowser1.GoForward(); } private void webBrowser1_CanGoForwardChanged(object sender, EventArgs e) { forwardButton.Enabled = webBrowser1.CanGoForward; } private void stopButton_Click(object sender, EventArgs e) { webBrowser1.Stop(); } private void refreshButton_Click(object sender, EventArgs e) { // 如果地址為 "about:blank" , 避免刷新. if (!webBrowser1.Url.Equals("about:blank")) webBrowser1.Refresh(); } private void homeButton_Click(object sender, EventArgs e) { webBrowser1.GoHome(); } private void searchButton_Click(object sender, EventArgs e) { webBrowser1.GoSearch(); } private void printButton_Click(object sender, EventArgs e) { webBrowser1.Print(); } private void webBrowser1_StatusTextChanged(object sender, EventArgs e) { toolStripStatusLabel1.Text = webBrowser1.StatusText; } // 用當前網頁文檔的標題取代窗口標題. private void webBrowser1_DocumentTitleChanged(object sender, EventArgs e) { this.Text = webBrowser1.DocumentTitle; } private void exitToolStripMenuItem_Click(object sender, EventArgs e) { webBrowser1.Dispose(); Application.Exit(); } private void CodeToolStripMenuItem_Click(object sender, EventArgs e) { // 顯示網頁源碼的對話框顯示出來 CodeView dialogCodeView = new CodeView(); dialogCodeView.Text = webBrowser1.Url.ToString() + " - 原始源"; dialogCodeView.Show(); // 把網頁源碼顯示在彈出的窗口中 // 首先解碼 //StreamReader reader = new StreamReader(webBrowser1.DocumentStream, Encoding.GetEncoding("GB2312")); //StreamReader reader = new StreamReader(webBrowser1.DocumentStream, Encoding.UTF8); StreamReader reader = new StreamReader(webBrowser1.DocumentStream, Encoding.Default); dialogCodeView.sourceCode = reader.ReadToEnd(); reader.Close(); } // 單擊程序中某個鏈接后會打開新窗口,此時就會執行NewWinow事件中的代碼 // 通過此事件中的代碼將打開新窗口中內容添加到本軟件的webBrowser控件中顯示 // 實現網頁用我們自定義的瀏覽器顯示 private void webBrowser1_NewWindow(object sender, System.ComponentModel.CancelEventArgs e) { string newURL = webBrowser1.StatusText; Form1 newform = new Form1(newURL); newform.toolStripStatusLabel1.Text = "正在打開網頁 " + newURL + " ..."; newform.Show(); // 使其他瀏覽器無法捕獲此事件 // 阻止了其他瀏覽器顯示網頁,而是采用我們自定義的瀏覽器來顯示 e.Cancel = true; } } }
