關於WinForm內嵌網頁的方案分享

WinForm本是一門很早的技術(目前仍然實用),似乎是2005年伴隨.NET2.0一起出現的。隨後出現的WPF、ADO.NET等相關技術也很多很多,但WinForm依然屹立。
那爲什麼要在WinForm內嵌網頁呢?在開發一些絢麗的界面效果時,HTML會更加便捷、強大。

直接奔入主題吧,如何在WinForm中顯示網頁呢?

1、將WebBrowser控件拖入到主窗體中。
2、在控件的url屬性中輸入目標地址,如www.baidu.com。此時F5啓動。即可看到百度的首頁了。
3、接下來就需要調整一些屬性、來讓這次網頁嵌入看起來更完善些
- WebBrowserShortcutsEnabled 是否啓用某些快捷鍵,例如“F5”刷新
- ScrollBarsEnabled 是否應該有滾動條
- Locked 是否可以移動控件或調整控件的大小
- AllowWebBrowserDrop 是否打開託放在其上的文件
- IsWebBrowserContextMenuEnabled 是否關閉右鍵快捷菜單
- ScriptErrorsSuppressed 設爲true,防止控件顯示網頁腳本代碼的錯誤信息
4、網頁和客戶端的雙向通信(如果你想在WinForm中展示自己的網站
-網頁調用客戶端的代碼
1. 在窗體構造函數或Load事件處理程序中設置ObjectForScripting屬性(下面代碼將窗體類自身用於腳本對象)

 public Form1()
        {
            InitializeComponent();
            webBrowser1.ObjectForScripting = this;
        }

2、在類的前面加入 [System.Runtime.InteropServices.ComVisible(true)]

 [System.Runtime.InteropServices.ComVisible(true)]
    public partial class Form1 : Form
    {
    }

3、編寫客戶端中的代碼

public void InvokeFormMethod(string message)
        {
            MessageBox.Show(message,"WinForm控件");
        }

4、在網頁裏調用

<input type="button" value="調用winform的方法" onclick="window.external.InvokeFormMethod('Called WinForm Code')" >

客戶端調用網頁裏的函數
1、在網頁內編寫函數

<script>
		function msgalert(msg)
			{
			   alert(msg);
			}
</script>

2、客戶端調用網頁中的函數

 private void button1_Click(object sender, EventArgs e)
        {
            webBrowser1.Document.InvokeScript("msgalert", new string[] { "Called Javascript code" });
        }

其他的一些瑣碎知識點

打開新頁面時如何防止彈出默認瀏覽器呢?

調用WebBrowser的NewWindow事件。在準備彈出新頁面時,取消彈出並用當前的WebBrowser打開新頁面

private void webBrowser1_NewWindow(object sender, CancelEventArgs e)
        {
            e.Cancel = true;
            webBrowser1.Navigate(webBrowser1.StatusText);
        }

如何你想在自己的網頁中播放視頻,但是無法正常播放時。試着升級下IE版本(WebBrowser默認使用的是IE7.0),在網頁中的head/title標籤中加入

<META http-equiv="X-UA-Compatible" content="IE=9" > </META>

尚未解決的問題,忘路過的大佬們指點一二…:)

我在用自己的WinForm程序訪問CSDN時,進入主頁沒有問題。但是點擊訪問其他人的博客時,會彈出窗口提示“堆棧溢出,位置:第三行”,然後頁面無法打開。如下圖
在這裏插入圖片描述

發佈了2 篇原創文章 · 獲贊 0 · 訪問量 2326
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章