browser 编程中 Delphi 如何返回数组给 javascript
在 Delphi 中使用免费的一个程序 TEmbeddedWB 替换常规的 TWebBrowser 组件。
创建一个自动化对象 MyExternal,以实现 IDispatch 接口。
添加一个 Hello 方法,输出类型设置为 Variant *, 其代码如下:
在主窗体中写如下代码,主要目的是关联 window.external 的扩展实现:
在 HTML 中,记住要用 js 里的 VBArray 来取得返回数组,再转换为 js 的数组:
创建一个自动化对象 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;
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;
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>
"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>