C#通過webbrowser控制元件與javascript互動
阿新 • • 發佈:2019-01-06
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控制元件。):
配置執行成功的話,可以看到相互呼叫的效果
//呼叫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>
配置執行成功的話,可以看到相互呼叫的效果