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

博客介绍了在Delphi中使用TEmbeddedWB替换TWebBrowser组件,创建自动化对象实现IDispatch接口并添加Hello方法。还给出主窗体关联window.external扩展实现的代码,以及HTML中用JS的VBArray获取返回数组并转换为JS数组的代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

function TMyExternal.Hello: OleVariant;
var
  arr: OleVariant;
begin
  arr :
= VarArrayCreate([09], 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、付费专栏及课程。

余额充值