1. 程式人生 > >C#通過webbrowser控制元件與javascript互動

C#通過webbrowser控制元件與javascript互動

1.C#裡呼叫控制元件裡面網頁的js函式
    //呼叫JavaScript的messageBox方法,並傳入引數
    object[] objects = new object[1];
    objects[0] = “C#訪問JavaScript指令碼";
    this.webBrowser1.Document.InvokeScript(“messageBox", objects);//object就是傳入的引數,而messageBox則是網頁中預定義好的js函式。
通過這種方式C#裡面就可以執行Javascript函式,可以把上面的程式碼放到一個button的click事件裡面。

2.webbrowser控制元件裡網頁js呼叫C#窗體的函式

首先需要在程式碼裡面加上
[System.Runtime.InteropServices.ComVisibleAttribute(true)] 
    public partial class Form1 : Form{
         …..//
    }
這樣使得C#的com物件是對網頁裡的javascript可見的。
然後在嵌入網頁裡面通過“window.external.MyMessageBox(‘javascript訪問C#程式碼’)" ,即通過window.external捕獲呼叫c#定義好的函式。

具體Form.cs程式碼如下(通過vs建立的c#window窗體應用,拖拽上一個webbrowser控制元件和button控制元件。):
		[System.Runtime.InteropServices.ComVisibleAttribute(true)]
        public partial class Form1 : Form
        {
            public Form1()
            {
                 InitializeComponent();
                 System.IO.FileInfo file = new System.IO.FileInfo("test.html");                
                 this.webBrowser1.Url = new Uri(file.FullName); // WebBrowser控制元件顯示的網頁路徑                
                 this.webBrowser1.ObjectForScripting =this;// 將當前類設定為可由指令碼訪問
             } 


			//提供給JavaScript呼叫的方法
            public void MyMessageBox(string message)
            {
                MessageBox.Show(message);
            } 


			private void button1_Click_1(object sender, EventArgs e)
            {
                //呼叫JavaScript的messageBox方法,並傳入引數
				object[] objects = new object[1];
				objects[0] = “C#訪問JavaScript指令碼";
				this.webBrowser1.Document.InvokeScript("messageBox", objects);
			}
		}


test.html內容比較簡單:

<html>
	<head>
		<meta http-equiv="Content-Language" content="zh-cn">
		<script language="javascript" type="text/javascript">
			<!– 提供給C#程式呼叫的方法 –>
			function messageBox(message)
			{
				alert(message);
			}
		</script>
</head>
<body>
	<!– 呼叫C#方法 –>
	<button onclick="window.external.MyMessageBox('javascript訪問C#程式碼')" >javascript訪問C#程式碼</button>
</body>
</html>


配置執行成功的話,可以看到相互呼叫的效果