在 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 >