ImageVerifierCode 换一换
格式:DOC , 页数:7 ,大小:35.50KB ,
资源ID:3064884      下载积分:20 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-3064884.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Js和Winform代码之间实现双向通信.doc)为本站会员(hw****26)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

Js和Winform代码之间实现双向通信.doc

1、最近工作需要,学习了一下 winform 内嵌 webbrowser 控件,然后与 htm 页面中的 javascript 交互调用的技术,因此有了这篇心得。总的来说,javascript 与 winform 的 code 互相调用,和 web 开发中 javascript 与服务器端代码通过 ajax 互相调用有类似之处。下面就用三个例子来说明:一.将 WebBrowser 控件放置在 winform 中,然后,写一个 Page1.htm,内容如下:function test(message) alert(message); Button我将此 Page1.htm 显示在 WebBrowse

2、r 中看看,这个不难写,在 winform 中加上下面一句即可。webBrowser1.Url= new Uri(“C:workspaceWindowsFormsAppWindowsFormsAppPage1.htm“);然后运行,在 winform 中的 webbrowser 显示出来这个 htm 了,点按钮调用 javascript 函数,弹出 alert 提示,一切都很正常,没什么稀奇。二.如果我把 javascript 中的函数挪到 winform 的 cs 代码里,htm 页面还能调用的到吗?这有点 ajax 的味道了,在客户端的 javascript 里如何调用 webpage.a

3、spx.cs 里的代码,在 ajaxpro 那时候,是需要在 webpage.aspx.cs 的代码里注册一下本页供 ajax 使用,在函数前也要声明一下是 ajax 函数的。再说回来,如果想调用 winform 中的代码,也类似的,要给 winform 设置一下 ComVisibleAttribute(true), 并给webbrowser 控件设置一下 webBrowser1.ObjectForScripting 属性。webBrowser1.Url= new Uri(“C:workspaceWindowsFormsAppWindowsFormsAppPage1.htm“);webBrow

4、ser1.ObjectForScripting = this;其实,如果做的好,可以把这些代码专门归入一个类中,方便管理,这里就变为:webBrowser1.ObjectForScripting = new 某类()了;然后,再在 winform 里写一个函数。public void Test(String message)MessageBox.Show(message, “client code“);最后,htm 里调用时要用 window.external 前缀一下 Test 方法名。Button然后再运行,就发现,htm 里的 onclick 事件,居然能调用 winform 里的 co

5、de 了,真是神奇!完整 winform 代码如下:using System;using System.Windows.Forms;using System.Security.Permissions;namespace WindowsFormsAppPermissionSet(SecurityAction.Demand, Name = “FullTrust“)System.Runtime.InteropServices.ComVisibleAttribute(true)public partial class Form2 : Formprivate WebBrowser webBrowser1

6、 = new WebBrowser();public Form2()InitializeComponent();button1.Text = “call script code from client code“;button1.Dock = DockStyle.Top;button1.Click += new EventHandler(button1_Click);webBrowser1.Dock = DockStyle.Fill;Controls.Add(webBrowser1);Load += new EventHandler(Form2_Load);private void Form2

7、_Load(object sender, EventArgs e)webBrowser1.AllowWebBrowserDrop = false;webBrowser1.IsWebBrowserContextMenuEnabled = false;webBrowser1.WebBrowserShortcutsEnabled = false;webBrowser1.ObjectForScripting = this;webBrowser1.Url= new Uri(“C:workspaceWindowsFormsAppWindowsFormsAppPage1.htm“);public void

8、Test(String message)MessageBox.Show(message, “client code“); 总结一下,关键的 webBrowser1.ObjectForScripting 属性,ComVisibleAttribute(true)和 window.external。msdn 说 webBrowser1.ObjectForScripting 属性的作用是:获取或设置一个对象,该对象可由显示在 WebBrowser 控件中的网页所包含的脚本代码访问。使用该属性可以启用 WebBrowser 控件承载的网页与包含 WebBrowser 控件的应用程序之间的通信。使用该属性

9、可以将动态 HTML (DHTML) 代码与客户端应用程序代码集成在一起。为该属性指定的对象可作为 window.external 对象(用于主机访问的内置 DOM 对象)用于网页脚本。 可以将此属性设置为希望其公共属性和方法可用于脚本代码的任何 COM 可见的对象。可以通过使用 ComVisibleAttribute 对类进行标记使其成为 COM 可见的类。这一步也至关重要,如果不设置 ComVisibleAttribute(true),那这个程序就不能加载显示 htm 页面,因为htm 里用了 window.external.Test()方法,该方法所在的类如果不 ComVisible,就

10、无法访问到了。反过来,如果设置了 ComVisible,却不设置 webBrowser1.ObjectForScripting 属性,那代码执行时会报错:window.external 无效或找不到对象。 而缺少了 window.external,就更甭提了,因此,这三者缺一不可。 再看看这个 window.external,在常见的 javascript 书中不见踪影,但却非常有用,一个常见的应用是:引用别人的“在嵌入了浏览器的工程中,除了 IE 默认提供的外部方法之外,需要网页的脚本中能调用 c+代码,要实现这种交互,就必须实现脚本扩展。实现脚本扩展就是在程序中实现一个 IDispatch

11、 接口,通过 CHtmlView 类的OnGetExternal 虚函数返回此接口指针,这样就可以在脚本中通过 window.external.XXX(关键字 window 可以省略)来引用接口暴露的方法或属性(XXX 为方法或属性名)。“再看看在 c#中的脚本扩展,只需要 webBrowser1.ObjectForScripting 和 ComVisibleAttribute(true)简单一设置就完事了,简单吧!幸福吧!悲催吧!三.再来看一个,从 winform 的 code 里,能调用 html 页面里的 javascript 吗?Page1.htm,删掉 button,只保留 java

12、script 脚本。function test(message) alert(message); using System;using System.Windows.Forms;using System.Security.Permissions;namespace WindowsFormsAppPermissionSet(SecurityAction.Demand, Name = “FullTrust“)System.Runtime.InteropServices.ComVisibleAttribute(true)public partial class Form2 : Formprivate

13、 WebBrowser webBrowser1 = new WebBrowser();private Button button1 = new Button();public Form2()InitializeComponent();button1.Text = “call script code from client code“;button1.Dock = DockStyle.Top;button1.Click += new EventHandler(button1_Click);webBrowser1.Dock = DockStyle.Fill;Controls.Add(webBrow

14、ser1);Controls.Add(button1);Load += new EventHandler(Form2_Load);private void Form2_Load(object sender, EventArgs e)webBrowser1.AllowWebBrowserDrop = false;webBrowser1.IsWebBrowserContextMenuEnabled = false;webBrowser1.WebBrowserShortcutsEnabled = false;webBrowser1.ObjectForScripting = this;webBrows

15、er1.Url= new Uri(“C:workspaceWindowsFormsAppWindowsFormsAppPage1.htm“);private void button1_Click(object sender, EventArgs e)webBrowser1.Document.InvokeScript(“test“,new String “called from client code“ );这回关键的因素就是 webBrowser1.Document.InvokeScript 了,而webBrowser1.ObjectForScripting,ComVisible 不再需要了。HtmlDocument.InvokeScript 方法的作用是:执行在 HTML 页面中定义的动态脚本函数。至此,javascript 与 winform 的 code 就可以互相调用了,感觉和 web 开发也有些类似。这项技术叫在 javascript(DHTML)代码和客户端应用程序代码之间实现双向通信.

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。