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

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

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

function TMyExternal.Hello: OleVariant;
var
  arr: OleVariant;
begin
  arr :
=  VarArrayCreate([ 0 9 ], varVariant);

  arr[
0 ] : =   ' 1 ' ;
  arr[
1 ] : =   432.3 ;
  arr[
2 ] : =   ' 你好 ' ;
  arr[
3 ] : =   ' 哈哈fjsd3435 ' ;
  
  result :
=  arr;
end;

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

procedure TForm1.FormCreate(Sender: TObject);
var
  path: 
string ;
begin
  myBrowser.OnGetExternal :
=  BrowserGetExternal;
  Application.ProcessMessages;

  path :
=  ExtractFilePath(Application.ExeName)  +   ' default.htm ' ;
  myBrowser.Go(path);
end;

function TForm1.BrowserGetExternal(
out  idisp: IDispatch): HRESULT;
var
  myExternal: TMyExternal;
begin
  myExternal :
=  TMyExternal.Create;
  idisp :
=  myExternal;
  result :
=  S_OK;     
end;

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

<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd"
>
< html >
< head >
< meta  http-equiv ="Content-Type"  content ="text/html;charset=gb2312" >
< title >  New Document  </ title >
< meta  name ="Generator"  content ="EditPlus" >
< meta  name ="Author"  content ="Neil Chen(木野狐)" >
< meta  name ="keywords"  content ="" >
< meta  name ="description"  content ="" >
< SCRIPT  LANGUAGE ="JavaScript" >
<!--
function test() {
    
var result = window.external.Hello();
    alert(result.length);
    
var vbarr = new VBArray(result);
    
var arr = vbarr.toArray();
    alert(arr.length);

    
for (var i = 0; i < arr.length; i++)
        txtResult.value 
+= arr[i] + '/n'; 
}

//-->
</ SCRIPT >
</ head >
< body >
Hello World!
< button  onclick ="test();" > Test </ BUTTON >

< textarea  id ="txtResult"  rows ="10"  cols ="60" ></ textarea >
</ body >
</ html >
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值