代码改变世界

[资料收集]Delphi 与 JavaScript

2013-04-22 15:05  lilooo  阅读(452)  评论(0编辑  收藏  举报

一、在 Delphi 中调用 JavaScript

[来源]http://www.cnblogs.com/del/archive/2008/07/30/1256826.html

 本例测试用的 Html 文件(包含三个要测试的 Js 函数):



本例效果图:



代码文件:


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtrls, SHDocVw;

type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  HtmlPath: string;
begin
  WebBrowser1.Left := -WebBrowser1.Width; {隐藏 WebBrowser1}
  HtmlPath := ExtractFilePath(ParamStr(0)) + 'Test.htm';
  WebBrowser1.Navigate(HtmlPath);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  str: Variant;
begin
  str := WebBrowser1.OleObject.document.parentWindow.JsStr2('12345');
  ShowMessage(str);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  num: Variant;
begin
  num := WebBrowser1.OleObject.document.parentWindow.JsNum2(4);
  ShowMessage(num);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  WebBrowser1.OleObject.document.parentWindow.JsMsg('ABC');

  {也可以这样:}
  WebBrowser1.OleObject.document.parentWindow.execScript('JsMsg("ABCDEFG")', 'JavaScript');
end;

end.


二、Delphi程序中运行JavaScript脚本代码
[来源]http://blog.csdn.net/manstar/article/details/7216343

微软Windows操作系统中有一个叫ScriptControl的OCX组件

利用这个组件,可以在自己的程序中运行JavaScript或VBScript这两种脚本代码

使用很简单,新建一个工程,在窗体中放一个Button1控件

在Button1控件的Click事件中写代码如下:

procedure TForm1.Button1Click(Sender: TObject);
var
  js:OleVariant;
begin
  js:=CreateOleObject('ScriptControl');//创建组件
  js.Language:='JavaScript';//指定组件所使用的语言,也可以是VBScript
  ShowMessage(js.Eval('100+1'));//计算100+1的值
  js:=Unassigned;
end;

上例中,使用ScriptControl组件计算出100+1的值,并显示出来

Eval是ScriptControl组件的一个常用方法,返回值是string类型

另一个比较常用的方法是AddCode,如果有比较复杂的脚本代码需要运行,就先用AddCode将脚本代码添加进来,再进行运算

 示例2:

{此函数需要 ComObj 单元的支持}
{参数 JsCode 是要执行的 Js 代码; 参数 JsVar 是要返回的变量}
function RunJs(const JsCode, JsVar: string): string;
var
  script: OleVariant;
begin
  try
    script := CreateOleObject('ScriptControl');
    script.Language := 'JavaScript';
    script.ExecuteStatement(JsCode);
    Result := script.Eval(JsVar);
  except
    Result := '';
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
begin
  s := RunJs(Memo1.Text, 'str');
  ShowMessage(s);
end;