zoukankan      html  css  js  c++  java
  • browser 编程中 Delphi 如何返回数组给 javascript

    在 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>
  • 相关阅读:
    20180925-5 代码规范,结对要求
    20180925-6 四则运算试题生成
    20180925-7 规格说明书-吉林市2日游
    第二周例行报告
    第二周博客作业
    【杨老师粉丝群】第一周立会报告第四次
    20180925-1 每周例行报告
    规格说明书——吉林市两日游
    效能分析
    四则运算试题生成
  • 原文地址:https://www.cnblogs.com/RChen/p/231305.html
Copyright © 2011-2022 走看看