当前位置: 首页 > news >正文

browser 编程中 Delphi 如何返回数组给 javascript

在 Delphi 中使用免费的一个程序 TEmbeddedWB 替换常规的 TWebBrowser 组件。
创建一个自动化对象 MyExternal,以实现 IDispatch 接口。

添加一个 Hello 方法,输出类型设置为 Variant *, 其代码如下:

None.gif function TMyExternal.Hello: OleVariant;
None.gifvar
None.gif  arr: OleVariant;
None.gifbegin
None.gif  arr :
=  VarArrayCreate([ 0 9 ], varVariant);
None.gif
None.gif  arr[
0 ] : =   ' 1 ' ;
None.gif  arr[
1 ] : =   432.3 ;
None.gif  arr[
2 ] : =   ' 你好 ' ;
None.gif  arr[
3 ] : =   ' 哈哈fjsd3435 ' ;
None.gif  
None.gif  result :
=  arr;
None.gifend;
None.gif

在主窗体中写如下代码,主要目的是关联 window.external 的扩展实现:

None.gif procedure TForm1.FormCreate(Sender: TObject);
None.gifvar
None.gif  path: 
string ;
None.gifbegin
None.gif  myBrowser.OnGetExternal :
=  BrowserGetExternal;
None.gif  Application.ProcessMessages;
None.gif
None.gif  path :
=  ExtractFilePath(Application.ExeName)  +   ' default.htm ' ;
None.gif  myBrowser.Go(path);
None.gifend;
None.gif
None.giffunction TForm1.BrowserGetExternal(
out  idisp: IDispatch): HRESULT;
None.gifvar
None.gif  myExternal: TMyExternal;
None.gifbegin
None.gif  myExternal :
=  TMyExternal.Create;
None.gif  idisp :
=  myExternal;
None.gif  result :
=  S_OK;     
None.gifend;

在 HTML 中,记住要用 js 里的 VBArray 来取得返回数组,再转换为 js 的数组:

None.gif <! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
None.gif        "http://www.w3.org/TR/html4/strict.dtd"
>
None.gif
< html >
None.gif
< head >
None.gif
< meta  http-equiv ="Content-Type"  content ="text/html;charset=gb2312" >
None.gif
< title >  New Document  </ title >
None.gif
< meta  name ="Generator"  content ="EditPlus" >
None.gif
< meta  name ="Author"  content ="Neil Chen(木野狐)" >
None.gif
< meta  name ="keywords"  content ="" >
None.gif
< meta  name ="description"  content ="" >
ExpandedBlockStart.gifContractedBlock.gif
< SCRIPT  LANGUAGE ="JavaScript" > dot.gif
InBlock.gif
<!--
ExpandedSubBlockStart.gifContractedSubBlock.gif
function test() dot.gif{
InBlock.gif    
var result = window.external.Hello();
InBlock.gif    alert(result.length);
InBlock.gif    
var vbarr = new VBArray(result);
InBlock.gif    
var arr = vbarr.toArray();
InBlock.gif    alert(arr.length);
InBlock.gif
InBlock.gif    
for (var i = 0; i < arr.length; i++)
InBlock.gif        txtResult.value 
+= arr[i] + '\n'; 
ExpandedSubBlockEnd.gif}

ExpandedBlockEnd.gif
//-->
None.gif
</ SCRIPT >
None.gif
</ head >
None.gif
< body >
None.gifHello World!
None.gif
< button  onclick ="test();" > Test </ BUTTON >
None.gif
None.gif
< textarea  id ="txtResult"  rows ="10"  cols ="60" ></ textarea >
None.gif
</ body >
None.gif
</ html >

相关文章:

  • 应用IBatisNet+Castle进行项目的开发
  • 陪女友逛街完全手册 --搞笑
  • iOS 推送
  • 由浅入深学“工厂模式”(2)
  • 如何用十条命令在一分钟内检查Linux服务器性能
  • 第 4 章 构建以数据为中心的应用程序
  • T-SQL中的递归 --作者:Alexander Kozak
  • lamp--php部分
  • 地图人气大数据平台
  • 路由
  • 《Exceptional C++ Style中文版》 作者:Herb Sutter 定价39元
  • 9.19 数组 冒泡排序和二分法
  • Visual Studio 2015 for Linux更好地支持Linux下的开发
  • 如何要求加薪
  • 一个简单的替换Emoji表情字符的方法
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • 10个最佳ES6特性 ES7与ES8的特性
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • JavaScript-Array类型
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • spark本地环境的搭建到运行第一个spark程序
  • Vue全家桶实现一个Web App
  • 第十八天-企业应用架构模式-基本模式
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 分享一份非常强势的Android面试题
  • 前嗅ForeSpider中数据浏览界面介绍
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 微信小程序开发问题汇总
  • Java数据解析之JSON
  • #NOIP 2014#Day.2 T3 解方程
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (十) 初识 Docker file
  • (五)Python 垃圾回收机制
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转) Android中ViewStub组件使用
  • .NET 5种线程安全集合
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .net(C#)中String.Format如何使用
  • .NET的微型Web框架 Nancy
  • .sys文件乱码_python vscode输出乱码
  • /etc/skel 目录作用
  • @Autowired @Resource @Qualifier的区别
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell
  • [ARM]ldr 和 adr 伪指令的区别
  • [BT]BUUCTF刷题第9天(3.27)
  • [BZOJ1053][HAOI2007]反素数ant