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>
  • 相关阅读:
    什么是工厂模式
    冒泡算法
    CSS中的绝对定位与相对定位
    JS function立即调用的几种写法
    paip.java 线程无限wait的解决
    paip.java 多线程参数以及返回值Future FutureTask 的使用.
    PAIP.并发编程 多核编程 线程池 ExecutorService的判断线程结束
    paip.slap工具与于64位win7与JDBC的性能对比
    JProfiler8 注册码序列号
    paip.提升性能---mysql 优化cpu多核以及lan性能的关系.
  • 原文地址:https://www.cnblogs.com/RChen/p/231305.html
Copyright © 2011-2022 走看看