将数据从 JavaScript 发送到 Delphi (firemonkey)

Send Data from JavaScript to Delphi (firemonkey)

提问人:melina 提问时间:7/17/2022 最后编辑:MartynAmelina 更新时间:7/17/2022 访问量:262

问:

enter image description here

在德尔福中,通过下面的代码我可以将数据发送到 Javascript 并且运行良好,但是如何将数据从 Javascript 发送到 Delphi?

首先,我在Javascript中使用了以下代码,但没有工作:

JS_DELPHI._geta() ;

甚至下面的代码也不起作用:

TMyExtension._geta() ;

我认为我在 Delphi 中的代码没有一些基本代码。

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, ceffmx, FMX.Edit ,   ceflib ,
   uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes, uCEFListValue, uCEFBrowser, uCEFFrame, uCEFRequest,
  uCEFv8Context, uCEFv8Exception, uCEFv8StackTrace, uCEFDomNode, uCEFProcessMessage, uCEFApplicationCore;

type
  TForm1 = class(TForm)
    ChromiumFMX1: TChromiumFMX;
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;


   type
//这里建议用class  不建议用class(TThread)  不然有些地方要报错
TMyExtension = class(TThread) // or just class, (extension code execute in thread)
  public
  class function _geta:string;
end;

TCustomRenderProcessHandler = class(TCefRenderProcessHandlerOwn)
protected
    procedure OnWebKitInitialized; override;
end;


var
  Form1: TForm1;
  d : Integer   ;
  m : TMyExtension ;
  CefRenderProcessHandler : TCustomRenderProcessHandler ;

implementation

{$R *.fmx}
{$R *.LgXhdpiPh.fmx ANDROID}
{$R *.XLgXhdpiTb.fmx ANDROID}
{$R *.SSW3.fmx ANDROID}

procedure TForm1.Button1Click(Sender: TObject);
begin
ChromiumFMX1.Load('http://localhost/index.html');

 Edit1.Text := '555 ';

  ShowMessage('hiiiiiiiiiiiiiiiii');
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
ChromiumFMX1.Browser.MainFrame.ExecuteJavaScript(' d1();',ChromiumFMX1.browser.MainFrame.GetURL, 0);
end;


class function TMyExtension._geta: string;
begin
ShowMessage('dddddddddddddddddddddddd');
  Result:='salam';
end;

procedure TCustomRenderProcessHandler.OnWebKitInitialized;

begin
    {$IFDEF DELPHI14_UP}
    TCefRTTIExtension.Register('JS_DELPHI', TMyExtension);
  {$ENDIF}
end;



initialization
  CefRemoteDebuggingPort := 9000;
  CefRenderProcessHandler := TCustomRenderProcessHandler.Create;
  CefBrowserProcessHandler := TCefBrowserProcessHandlerOwn.Create;
end.

end.
德尔福 铬火

评论

1赞 Salvador Díaz Fau 7/18/2022
这个问题在这里得到回答:stackoverflow.com/questions/64303829/......
0赞 melina 7/18/2022
你能完成我的代码吗?
0赞 melina 7/18/2022
亲爱的,请帮我解决这个问题......我肯定要解决这个问题
0赞 Salvador Díaz Fau 7/18/2022
如果您需要快速解决方案,请使用控制台消息将信息从 JavaScript 发送到 Delphi。从 JavaScript 调用“console.log()”并使用 TChromium.OnConsoleMessage 事件获取信息。所有代码都在 DOMVisitor 演示中。
0赞 melina 7/18/2022
我是一个新手,这对我来说很难......我必须解决上面的问题。

答: 暂无答案