网络上也有人写了关于Delphi与Javascript的文章,其大多数使用ScriptControl等,均无法达到与Delphi自身融合的效果。我也是在翻阅自己的组件库的时候发现了这个以前收集来的代码。这个主要是使用了Mozilla的Javascript引擎,所以在程序运行的时候必须带上js3215R.dll和msvcr70.dll这两个动态链接库。

现在我们来看一看几个例子:

例程1:

说明:该例程主要是把Javascript代码以字符串的形式内置在Delphi程序代码内,然后与Delphi交互的。

unit Form;

{$I delphi.inc}

interface

uses
  Windows, Messages, SysUtils, {$IFDEF D6OR7}Variants, {$ENDIF}Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, jsintf;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    FEngine: TJSEngine;
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FEngine := TJSEngine.Create(40000);
  FEngine.StartDebugger;

FEngine.Global.AddNativeObject(Edit1, 'edit');
  FEngine.Global.AddNativeObject(Button1, 'button');

FEngine.Global.Evaluate('function toggle() { ' +
                          '  edit.Visible = ! edit.Visible;' +   // Toggle the visible property on/off
                          '  button.Caption = (edit.Visible ? "Hide" : "Show");' + // Change button
                          '}');
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FEngine.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  FEngine.Global.Evaluate('toggle()');
end;

end.
------------------------------------------------------------------------------------------------------
例程2:
说明:就是在例程的基础上把Javascript代码放置于Delphi程序外。

unit Form;

{$I delphi.inc}

interface

uses
  Windows, Messages, SysUtils, {$IFDEF D6OR7}Variants, {$ENDIF}Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, jsintf;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    FEngine: TJSEngine;
    FScript: TJSScript;
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FEngine := TJSEngine.Create(40000);
  FScript := TJSScript.Create;

FEngine.Global.AddNativeObject(Edit1, 'edit');
  FEngine.Global.AddNativeObject(Button1, 'button');

FScript.LoadRaw('script.js'); // Load the javascript code from file
  FScript.Execute(FEngine);     // Register the function with the JS engine
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FEngine.Free;
  FScript.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  FEngine.Global.Evaluate('toggle()');
end;

end.

Javascript代码如下:
function toggle() {
  edit.Visible = ! edit.Visible;  // Toggle the visible property on/off
  button.Caption = (edit.Visible ? "Hide" : "Show");  // Change button
}

本来还有一个例程我也就不贴了,最后把所有的代码一并打包提供下载,祝大家Enjoy Youself!
 点击下载此文件(2.07 MB)

http://www.lsworks.net/article/56.html

Delphi与Javascript的交互的更多相关文章

  1. C# WinForm 和 javascript进行交互 使用HTML做界面

    01 using System; 02 using System.Collections.Generic; 03 using System.Text; 04 using System.Reflecti ...

  2. 【HANA系列】SAP HANA XS使用JavaScript数据交互详解

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA XS使用Jav ...

  3. C# windows程序应用与JavaScript 程序交互实现例子

    C# windows程序应用与JavaScript 程序交互实现例子 最近项目中又遇到WinForm窗体内嵌入浏览器(webBrowser)的情况,而且涉及到C#与JavaScript的相互交互问题, ...

  4. 开源项目ScriptGate,Delphi与JavaScript相互调用的神器

    ScriptGate是一个实现TWebBrowser上的JavaScript和Delphi代码相互调用的库,具体在这里:https://bitbucket.org/freeonterminate/sc ...

  5. 【ActionScript】Flash与网页的交互,ActionScript与JavaScript的交互

    Flash是可以轻松与网页交互数据的,不然为何Flash会有这么大的生命力呢?仅仅是这样编程比較麻烦而已,又要调试Flash,然后又要放到server上调试. 只是这种方式可以收到非常好的效果.Fla ...

  6. 【HANA系列】【第一篇】SAP HANA XS使用JavaScript数据交互详解

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列][第一篇]SAP HANA XS ...

  7. OC与JavaScript的交互

    stringByEvaluatingJavaScriptFromString的用法,它的功能非常的强大,用起来非常简单,通过它我们可以很方便的操作uiwebview中的页面元素. UIWebView是 ...

  8. iOS开发之Objective-C与JavaScript的交互(转载)

    UIWebView是iOS最常用的SDK之一,它有一个stringByEvaluatingJavaScriptFromString方法可以将javascript嵌入页面中,通过这个方法我们可以在iOS ...

  9. Asp.net中后台C#数组与前台Javascript数组交互

    摘自:http://blog.csdn.net/a6225301/article/details/20003305 在上一篇<asp.net中javascript与后台c#交互>中实现了前 ...

随机推荐

  1. Android自学学习资料

    最近在自学Android编程,在网上看了一些博客和视频教程,觉得比较好的分享一下,继续学习,gangbade~ 国外android官网总是出现连不上的情况,如果你不想FQ的话,这里github上可以直 ...

  2. js中得call()方法和apply()方法的用法

    方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call 方 ...

  3. 将QT开发的界面程序封装成DLL,在VC中成功调用

    最近手头的一个项目需要做一个QT界面,并且封装成DLL,然后再动态调用DLL给出的接口函数,使封装在DLL内部的QT界面跑起来,在网上查了很多资料,今天终于成功了,经验不敢独享,因为CSDN给了我很多 ...

  4. COM组件开发实践(七)---多线程ActiveX控件和自动调整ActiveX控件大小(上)

    声明:本文代码基于CodeProject的文章<A Complete ActiveX Web Control Tutorial>修改而来,因此同样遵循Code Project Open L ...

  5. View not attached to window manager crash 的解决办法

    View not attached to window manager crash 的解决办法 转自:http://stackoverflow.com/questions/22924825/view- ...

  6. MongoDB appendix

    mongo 是数据库shell.一般假定它和mongod 运行在同一台机器上,还假定mongod 绑定了默认端口. eg.  mongo  staging.example.com:20000,这样就会 ...

  7. 类linux系统/proc/sysrq-trigger文件功能作用

    立即重启计算机      echo "b" > /proc/sysrq-trigger 立即关闭计算机      echo "o" > /proc/ ...

  8. 文件MD5

    package mainimport (    "crypto/md5"    "fmt"    // "github.com/astaxie/bee ...

  9. Unity 人物跟谁手指的移动(第一种方式)

    长夜漫漫无心睡眠,敲敲代码,越敲越来劲! 我发现好多小朋友都在玩熊出没之xxxx这个游戏,居然打了一下午都没玩通第2关,我把测试也叫来陪我一起玩! 结果他也打不通,我再去叫策划,他也没打过,我去叫主管 ...

  10. C#中如何只保留小数点后面两位?

    string.format("%.4f",1/3) 1.Math.Round(0.333333,2);//按照四舍五入的国际标准2. double dbdata=0.335333; ...