前几天发表了 IEBrowser 访问页面中变量或者 JSON 数据的文章, 现在想说明一下在 WebBrowser 中, js 脚本如何访问 .NET 类.
你可以通过 IEBrowser 的 Scripting 属性或者 WebBrowser 的 ObjectForScripting 属性来设置可以被 js 脚本访问的对象. 而在 js 脚本中可以通过 window.external 来调用对象的方法.
为了给大家演示, 在此之前我已经建好了一个本地数据库和对应的数据集, 并添加了一个 InsertStudent 方法在数据适配器中, 这些代码不方便在此展示, 需要看完成演示的朋友, 可以参考文章末尾的演示链接, 下面我们看 School 类的代码:
[ComVisible(true)]public class School{ public string Register ( string email, string realName, int age ) { if ( string.IsNullOrEmpty ( email ) ) return "EMail 不能为空"; if ( string.IsNullOrEmpty ( realName ) ) return "姓名不能为空"; if ( age <= 6 || age > 100 ) return "年龄应该在 7 到 100 之间"; try { SchoolDSTableAdapters.StudentTableAdapter adapter = new SchoolDSTableAdapters.StudentTableAdapter ( ); adapter.InsertStudent ( email, realName, age ); return "注册成功"; } catch { return "注册失败"; } }}School 类是需要使用 ComVisible 属性来修饰的, ComVisible 设置为 true, School 才能被 js 访问.
可以看到 School 只有一个简单的 Register 注册方法, 在方法当中, 我们检查了邮箱, 姓名, 年龄等参数的合法性, 然后通过之前建好的数据适配器向数据库中添加一条学生信息, 而 Register 最终返回一个字符串, js 脚本在调用 Register 方法后, 可以将此字符串显示给操作者.
下面的代码是页面 school.htm, 而这个页面也就是操作者和程序交互的界面:
<html>
姓名:
年龄: