global variant in delphi function registered in js
Posted: Wed May 08, 2019 12:57 pm
why js cannot obtain new value of global variant?
click button2 always show '' even button1 is clicked;
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls, Vcl.ComCtrls,Generics.Collections,
System.StrUtils, Masks,
uCEFWindowParent, uCEFChromium, uCEFConstants, uCEFApplication, uCEFInterfaces,
uCEFTypes, uCEFProcessMessage, uCEFMiscFunctions, uCEFSchemeRegistrar, uCEFRenderProcessHandler,
uCEFv8Handler, uCEFDomVisitor, uCEFDomNode, uCEFTask;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
CEFWindowParent1: TCEFWindowParent;
Chromium1: TChromium;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
myvariant:string;
procedure CreateGlobalCEFApp; //initialize
implementation
uses unit2, uCEFStringMultimap, DateUtils; // TCefStringMultimapOwn : uCEFStringMultimap
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
myvariant:='Unita1';
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
//
Chromium1.Browser.MainFrame.ExecuteJavaScript('TMyExtension.StringNameToVariant("1")', Chromium1.browser.MainFrame.GetURL (), 0 );
end;
procedure GlobalCEFApp_OnWebKitInitialized;
begin
// Registering the extension. Read this document for more details :
// https://bitbucket.org/chromiumembedded/ ... gration.md
TCefRTTIExtension.Register('MyJavaExtension', TMyExtension);
end;
procedure CreateGlobalCEFApp; //use , uCEFApplication
begin
GlobalCEFApp := TCefApplication.Create;
GlobalCEFApp.OnWebKitInitialized := GlobalCEFApp_OnWebKitInitialized;
end;
end.
----------
unit Unit2;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
type
TMyExtension = class
class function StringNameToVariant(const AStringName : string): string;
end;
implementation
uses unit1;
class function TMyExtension.StringNameToVariant(const AStringName : string): string;
begin
Result:=myvariant;
showmessage(myvariant); //not 'Unita1' but ''(beginning value)
end;
end.
click button2 always show '' even button1 is clicked;
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls, Vcl.ComCtrls,Generics.Collections,
System.StrUtils, Masks,
uCEFWindowParent, uCEFChromium, uCEFConstants, uCEFApplication, uCEFInterfaces,
uCEFTypes, uCEFProcessMessage, uCEFMiscFunctions, uCEFSchemeRegistrar, uCEFRenderProcessHandler,
uCEFv8Handler, uCEFDomVisitor, uCEFDomNode, uCEFTask;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
CEFWindowParent1: TCEFWindowParent;
Chromium1: TChromium;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
myvariant:string;
procedure CreateGlobalCEFApp; //initialize
implementation
uses unit2, uCEFStringMultimap, DateUtils; // TCefStringMultimapOwn : uCEFStringMultimap
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
myvariant:='Unita1';
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
//
Chromium1.Browser.MainFrame.ExecuteJavaScript('TMyExtension.StringNameToVariant("1")', Chromium1.browser.MainFrame.GetURL (), 0 );
end;
procedure GlobalCEFApp_OnWebKitInitialized;
begin
// Registering the extension. Read this document for more details :
// https://bitbucket.org/chromiumembedded/ ... gration.md
TCefRTTIExtension.Register('MyJavaExtension', TMyExtension);
end;
procedure CreateGlobalCEFApp; //use , uCEFApplication
begin
GlobalCEFApp := TCefApplication.Create;
GlobalCEFApp.OnWebKitInitialized := GlobalCEFApp_OnWebKitInitialized;
end;
end.
----------
unit Unit2;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
type
TMyExtension = class
class function StringNameToVariant(const AStringName : string): string;
end;
implementation
uses unit1;
class function TMyExtension.StringNameToVariant(const AStringName : string): string;
begin
Result:=myvariant;
showmessage(myvariant); //not 'Unita1' but ''(beginning value)
end;
end.