C#中使⽤Webbrowser控件如何传值
在使⽤Winform开发时,需要⽤到Webbrowser控件⽤来展⽰页⾯,如何将控件的值传给页⾯呢?
⼀. 对于少量参数值,可以在url地址中加⼊需要传输的值。前台页⾯js解析url地址参数即可
//C#代码,传输⽤户ID为80的值给testPage.aspx页⾯
string url = "localhost:8080//testPage.aspx?userID="+80;
webBrowser1.Navigate(url);
//JS代码,读取url中的userID
userID = GetQueryString("userID");//获取地址栏中的⽤户ID
function GetQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if (r != null) return decodeURI(r[2]); return null;
}
⼆. 对于⼤量数据,⽐如后台获取的⼤量数据在页⾯中⽤图展现,可以使⽤webBrowser的ObjectForScripting属性。
MSDN上对ObjectForScripting的解释是:获取或设置⼀个对象,该对象可由显⽰在 WebBrowser 控件中的⽹页所包含的脚本代码访问,⼀开始看不懂这句话什么意思,仔细琢磨,其实就是说webBrowser控件指向的页⾯可以通过页⾯的js访问ObjectForScripting设置的对象,该对象⼀般设置为后台对象,这样就可以使前台页⾯访问后台⽅法。
在设置了webBrowser控件的ObjectForScripting属性后,还需要设置应⽤程序对com可见,不然会抛出⼀个异常 ,可做如下设置: [System.Runtime.InteropServices.ComVisible(true)]
//C#调⽤窗⼝
BusinessDataExportFigure bdef = new BusinessDataExportFigure();
bdef.strData = resultStr;//结果数据赋值传递
bdef.Show();
//C#后台代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace sample
{
[System.Runtime.InteropServices.ComVisibleAttribute(true)]//标记对com可见
public partial class BusinessDataExportFigure : Form
{
public string strData;//⽤于承接后台数据
public BusinessDataExportFigure()
{
InitializeComponent();
}
public string GetData()
{
//供页⾯调⽤以传递数据
return strData;
}
private void BusinessDataExportFigure_Load(object sender, EventArgs e)
{
this.webBrowser1.ObjectForScripting = this;//设置对象为当前BusinessDataExportFigure窗体
string url = "localhost:8080//testPage.aspx";
this.webBrowser1.Navigate(url);
}
}
}
上⾯代码是在⼀个名称命名为BusinessDataExportFigure的Form中添加了⼀个webBrowser控件,该webBrowser控件指向testPage.aspx页⾯
//testPage页⾯
<html xmlns="/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type"content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<div>
<button onclick="showData()">点击查看</button>
</div>
浏览web是什么意思</body>
<script>
function showData() {
var data = al.GetData();//使⽤al直接调⽤后台C#⽅法
alert(data);
}
</script>
</html>
题外话:上⾯实现了JS调⽤后台C#⽅法,那么C#是否也可以调⽤页⾯JS函数呢?
这个是可以的,使⽤webBrowser控件的Document对象的InvokeScript⽅法即可。
该⽅法有两种参数形式
InvokeScript(string):string为要执⾏的脚本函数的名称,JS函数不需要参数
InvokeScript(string,Object[]):string为要执⾏的脚本函数的名称;Object[]要传递到脚本函数的参数例如:
//HTML代码
<script type="text/javascript">
function sayHello(name,message)
{
alert(name+","+message);
}
</script>
调⽤:
//C#
if(this.loadCompleted)//在⽂档加载完毕后调⽤
{
webBrowser1.Document.InvokeScript("sayHello", new Object[] {Tom,"hello"});
}
需要注意的⼀点是,使⽤InvokeScript⽅法需要在⽂档加载完毕后,所以需要检查⽂档加载情况
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论