当前位置 : 主页 > 网络编程 > 其它编程 >

WebBrowser控件内部页面的JS代码与外部C#代码的相互调用

来源:互联网 收集:自由互联 发布时间:2023-07-02
场景1C#程序调用JS函数刷新网页输出再见两字测试目标C#调用JS函数场景2C#程序调用JS函数刷 场景1C#程序调用JS函数刷新网页输出再见两字测试目标C#调用JS函数 场景2C#程序调用JS函数刷新
场景1C#程序调用JS函数刷新网页输出再见两字测试目标C#调用JS函数场景2C#程序调用JS函数刷

场景1C#程序调用JS函数刷新网页输出再见两字测试目标C#调用JS函数

场景2C#程序调用JS函数刷新网页输出文字为用户输入的文字测试目标C#调用带参数的JS函数

场景3C#程序调用JS函数获取今日的年月日信息yyyy-MM-dd测试目标C#能否正确接收JS函数返回值

场景4JS调用C#函数输出上面↑↑↑指bulletin的文字内容测试目标JS调用C#应用程序中带参数的函数

场景5JS调用C#函数将左侧输入框中的内容转大写后放到右侧输入框中测试目标JS调用C#应用程序中带参数的函数并接收返回值

下面放代码

C#端程序FormMain.cs的代码如下

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 WebBrowserJsTest{[System.Runtime.InteropServices.ComVisible(true)]public partial class FormMain : Form{public FormMain(){InitializeComponent();}/// /// Load函数/// /// /// private void FormMain_Load(object sender, EventArgs e){try{string path Environment.CurrentDirectory "\\WebBrowserJsTest.html";webBrowser.Navigate(path);webBrowser.ObjectForScripting this;}catch (Exception ex){MessageBox.Show(ex.ToString());}}/// /// 测试1/// /// /// private void btn4Test1_Click(object sender, EventArgs e){webBrowser.Document.InvokeScript("sayGoodBye", null);}/// /// 测试2/// /// /// private void btn4Test2_Click(object sender, EventArgs e){webBrowser.Document.InvokeScript("changeBulletin", new object[] { txt4Test2.Text });}/// /// 测试3/// /// /// private void btn4Test3_Click(object sender, EventArgs e){object obj webBrowser.Document.InvokeScript("getTodaysDate", null);MessageBox.Show(obj.ToString());}/// /// 测试4/// /// public void ShowBulletin(string word){MessageBox.Show(word);}/// /// 测试5/// /// /// public string ToUpper(string word){return word.ToUpper();}}}

另一个HTML文件名为WebBrowserJsTest.html

这是一个测试用的页面


输出都写在这里你好
测试4JS调用C#函数输出上面↑↑↑的文字内容测试目标JS调用C#应用程序中带参数的函数
测试5JS调用C#函数将左侧输入框中的内容转大写后放到右侧输入框中测试目标JS调用C#应用程序中带参数的函数并接收返回值

经过测试我得出了如下几个结论C#写的部分简称CWebBrowser内的页面代码简称B

1、C调用B的JS代码可以传参数可以接返回值

使用的是 webBrowser.Document.InvokeScript("JS中函数名", new object[] {参数列表})

2、B调用C中写的函数可以传参数可以接返回值

使用的是  window.external.[C#中的函数名](参数列表)

下面来说一下我是如何实现它们

1、在C#代码中调用WebBrowser内页面的JS函数

可以通过WebBrowser控件中的Document.InvokeScript函数实现不过要为放置WebBrowser的窗体相关类加特性

[System.Runtime.InteropServices.ComVisible(true)]

2、从WebBrowser内的JS代码中调用C#相关函数

可以通过JS代码window.external.函数名(参数) 来调用C#中同名同参数个数的函数但浏览器控件WebBrowser的ObjectForScripting属性需要置成this这个改动在Load函数中放置即可

webBrowser.ObjectForScripting this;

如果不加这行代码JS代码调用C#函数时会报脚本错误。

转载https://my.oschina.net/Tsybius2014/blog/643909

【本文由:阿里云代理 http://www.56aliyun.com欢迎留下您的宝贵建议】
上一篇:C#.netMapRoute到html文件
下一篇:没有了
网友评论