内嵌浏览器,浏览器内嵌.NET控件技术架构(二)

3. 使用javascript调用.Net对象

使用javascript调用.Net控件
在网页中,对于任何一个DOM对象,我们都可以使用document.getElementById方法获取该对象然后对它进行操作。而对于嵌入的.Net对象其实是一样的。 我们在前面的例子的基础上,给HelloIE控件增加一个函数 public void SendMessage(string text) { this.label1.Text = text; } 然后在页面中增加一个按钮,为按钮增加一个响应函数,获取HelloIE控件对象,并调用SendMessage函数。 重新编译,然后打开一个新的浏览器浏览,点击Call SendMessage按钮,结果如下: wps_clip_image-15365浏览器内嵌.NET控件技术架构(二)内嵌浏览器 如果点击Call SendMessage按钮后出现脚本错误“对象不支持此属性或方法”,是因为HelloIE控件类缺少一个最关键的代码:为该类添加[ComVisible(true)]属性。这也充分说明了该控件与IE的交互其实就是COM组件之间的通信,只不过是多经过一个中介:脚本引擎而已。 每次重新编译程序以后,一定要开一个新的浏览器,启动一个新的进程,才能把新的dll加载进来。如果只是使用刷新页面,浏览器依然会使用已经加载的旧的dll。
使用javascript调用非可视化.Net对象
可以嵌入网页的不仅仅是控件,所有的.Net类都可以。我们增加一个MathClass类,增加一个方法返回PI值。 [ComVisible(true)] public class MathClass { public double GetPI() { return Math.PI; } } 然后在页面中嵌入MathClass,增加一个按钮,点击显示PI值 重编译项目,点击Call MathClass按钮效果如下: wps_clip_image-5107wps_clip_image-15365浏览器内嵌.NET控件技术架构(二)内嵌浏览器
开发与调试技巧
如果.Net控件内部出现异常的话,比如没有提供默认的无参构造函数,该控件也会显示不出来,而且在浏览器中看不到任何提示,因此在开发过程中为了方便调试,我们可以再创建一个Windows项目,把控件拖到一个WinForm中进行调试。 为了让开发更加便利,我们可以在控件上增加一个标签显示当然程序集的版本号,并且让每次编译的Build号加1,这样我们可以通过版本号来判断加载的是不是最新的dll。如果嫌每次编译都要手动修改Build号麻烦的话,可以使用一个VS插件http://www.codeproject.com/KB/macros/versioningcontrolledbuild.aspx wps_clip_image-15368wps_clip_image-5107wps_clip_image-15365浏览器内嵌.NET控件技术架构(二)内嵌浏览器
Tags: 

延伸阅读

最新评论

发表评论