2010/8/1更新:
实际项目中使用发现如果页面大量使用了 ajax,这个解决方案还存在很错问题,工作起来非常不稳定。慎用!!!
下载地址:
http://download.youkuaiyun.com/source/1913671
我们目前的项目程序普遍使用 Delphi 客户端内嵌 Internet Explorer 的方式实现,在开发过程中,由于不同的页面经常需要做一些特殊的处理,从而经常涉及到网页和客户端交互的过程。
在以往的项目中,我们大都通过在 Delphi 中捕获浏览器某个对象的事件的方式来解决,随着需要交互的地方越来越多,客户端的代码也由于增加了大量的代码变得难以维护,同时这些代码页不具有通用性,一旦换到另一个项目,绝大部分的事件处理代码随之废弃。而从网页向客户端传递数据我们以前大都采用 Cookie 的方式,这种方式一来由于 Cookie 本身存在不安全性,另外最大的缺点就是无法实时与客户端进行通信。
基于以上原因,封装了一个 VCL,通过简单的方式,实现 Web page 和客户端之间的双向实时通信。此VCL 具有以下特点:
1. 最少代码,应用程序只需在窗口中放入相应的 VCL 控件,调用相应的方法发送命令, 如果需要接收命令,征订相应的事件就可以了
2. VCL 会自动在网页上生成相应的函数,网页如需向应用程序发送命令,只要调用相应的函数就可以了
3. 具体的命令和命令的参数由网页和应用程序之间自由约定, VCL 本身不做任何限制
原理非常简单,有兴趣的自己看一下代码,总共也就200行。
使用方法
1. 首先在 Delphi 中安装 TWebInteractive VCL
安装后在 Delphi 面板会生成 iFLYTEK VCL 一栏,目前只有一个 WebInteractive 组件。
2. 在 Form 设计面板上添加 TWebInteractive 对象,并设置属性和事件
此处 WebBrowser 为 TEmbeddedWB 对象,不是 Delphi 自带的 TWebBrowser 。
3. 调用方法,在 Delphi 中如需要向网页发送命令,可通过 TWebInteractive 的 SendClientCommand 方法,示例:
wbntrctv1.SendClientCommand('call', 'test(''param1'', ''param2'')');
目前仅支持 call 命令,用来调用网页中的 javascript 函数,对应的参数就是具体函数的调用表达式。
4. 在网页中如需要想客户端发送命令,可直接调用 SendClientCommand( 命令,参数 ) ,具体命令及参数有客户端在 OnGetClientCommand 中进行处理。
转载请注明出处:http://blog.youkuaiyun.com/jh_zzz