在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
ScriptGate是一个实现TWebBrowser上的JavaScript和Delphi代码相互调用的库,具体在这里:https://bitbucket.org/freeonterminate/scriptgate 用ScriptGate,我们可以轻松实现JavaScript在Delphi上的使用了,目前支持最新的Delphi tokyo 10.2.3版,注意,属于FMX类型的控件,作者说支持Windows,MacOS,Android及iOS. 我该怎么办? 例如,您可以从Delphi调用以下JavaScript方法。 <head> <script type = “text / javascript” > function helloJS () { alert (“Hello,JavaScript!” ); } </ script> </ head> procedure TForm1.Button1Click(Sender: TObject); begin FScriptGate.CallScript('helloJS()'); end; 看清了吧,在Delphi中调用JavaScript的helloJS。 反之,再看看从JavaScript调用Delphi方法: procedure TForm1.HelloDelphi() begin ShowMessage('Hello, Delphi!'); end; <body> <a href="delphi:HelloDelphi()">Call Delphi</a> </body> 注意这里的“delphi:”字符串,是TScriptGate构造函数指定的方案,不明白,那继续往下看。 尝试使用ScriptGate
准备工作
首先,从BitBucket下载代码。 如果Android包含在开发目标中,请将SGWebClient.jar添加到Android的库中。 至此,准备工作完成。 建立TScriptGate
这里我们将ScriptGate与WebBrowser1,TForm1结合使用。 unit Unit1; interface uses {...} SG.ScriptGate; //手工引用此单元 type TForm1 = class(TForm) WebBrowser1: TWebBrowser; Layout1: TLayout; Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private var FScriptGate: TScriptGate; // 增加一个FScriptGate对象 public procedure HelloDelphi; // 增加一个准备在JS中调用的Delphi方法 end; 利用Form1的OnCreate事件,先建一个TScriptGate的实例对象FScriptGate implementation procedure TForm1.FormCreate(Sender: TObject); begin FScriptGate := TScriptGate.Create(Self, WebBrowser1, 'delphi'); end; TScriptGate.Create原型: constructor Create( const iReceiver: TObject; const iWebBrowser: TWebBrowser; const iScheme: String); reintroduce;
iReceiver是一个从JavaScript接收响应的实例。 如: type TReceiver = class public procedure Foo; procedure Bar(const msg: String); end; 如果您指定名为TReceiver 的类的实例,则可以从JavaScript调用Bar方法。
指定TScriptGate所关联的TWebBrowser的一个实例。
调用第一个示例中附加的iScheme ScriptGate方法“delphi:”的参数。 然后编写一个调用JavaScript的方法和一个从JavaScript调用的方法。 //在JavaScript中调用helloJS()。 //你也可以使用匿名函数检索返回值。 procedure TForm1.Button1Click(Sender: TObject); begin FScriptGate.CallScript( 'helloJS()', procedure(const iResult: String) begin ShowMessage(iResult); end ); end; //允许JavaScript调用的方法,JavaScript中的方法被称为HelloDelphi。 procedure TForm1.HelloDelphi; begin ShowMessage('Hello, Delphi!'); end; 加载到WebBrowser1中的HTML如下所示。 <html> <header> <script type="text/JavaScript"> function helloJS() { alert("Hello, JavaScript!"); return "Hello !!"; } </script> </head> <body> <br><br> <a href="delphi:HelloDelphi()">Call Delphi procedure</a> <body> </html>; 下面是作者写的完整的例子,演示了Delphi与JavaScript间如何互相调用以及在调用时,如何传递参数。 unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls, FMX.Layouts, FMX.WebBrowser, SG.ScriptGate; type TForm1 = class(TForm) WebBrowser1: TWebBrowser; Layout1: TLayout; Button1: TButton; Layout2: TLayout; Button2: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private var FScriptGate: TScriptGate; public procedure HelloDelphi(const iStr: String); procedure Add(const Msg: String; const A, B: Integer); end; var Form1: TForm1; implementation {$R *.fmx} const SampleHTML = '<html>' + '<header>' + '<script type="text/JavaScript">' + 'function helloJS(msg, msg2) { alert(msg + msg2); return "Hello Delphi ! I am JavaScript !"; }' + // Call from Delphi '</script>' + '</head>' + '<body>' + '<br><br>' + // Call Delphi Method '<a href="YourOrgScheme:HelloDelphi(''call by JS'')">Call Delphi noparam procedure</a>' + '<br><br>' + '<a href="YourOrgScheme:Add(''Calc: 30 + 12 = '', 30, 12)">Call Delphi procedure</a>' + '<body>' + '</html>'; procedure TForm1.FormCreate(Sender: TObject); begin WebBrowser1.LoadFromStrings(SampleHTML, '/'); // The method of the object specified by the first argument is // called from JavaScript. FScriptGate := TScriptGate.Create(Self, WebBrowser1, 'YourOrgScheme'); end; procedure TForm1.Button1Click(Sender: TObject); begin FScriptGate.CallScript( 'helloJS("Hello JS ! ", "I am Delphi !")', procedure(const iResult: String) begin ShowMessage(iResult); end ); end; procedure TForm1.Button2Click(Sender: TObject); begin FScriptGate.Eval( 'document.getElementsByTagName("html")[0].outerHTML', procedure(const iResult: String) begin ShowMessage(iResult); end ); end; procedure TForm1.Add(const Msg: String; const A, B: Integer); begin ShowMessage(Msg + (A + B).ToString); end; procedure TForm1.HelloDelphi(const iStr: String); begin ShowMessage('Hello ! ' + iStr); end; end.
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论