声明一个接收网页返回值的 类: TJavaScriptValueCallback
interface
uses
{$IFDEF POSIX}
Androidapi.JNI.GraphicsContentViewText,
Androidapi.JNIBridge,
Androidapi.JNI.Telephony,
Androidapi.Jni.JavaTypes,
Androidapi.JNI.Net,
Androidapi.Helpers,
Androidapi.JNI.WebKit,
Androidapi.JNI.Embarcadero,
FMX.Platform.Android,
{$ENDIF}
FMX.Dialogs,
system.UITypes,
FMX.Forms,
FMX.Types,
System.Messaging,
fmx.WebBrowser,
System.RegularExpressions,
System.SysUtils,
System.Types,
System.Classes;
type
{$IFDEF POSIX}
TJavaScriptResultEvent = procedure(Sender: TObject; const JavaScriptResult: string) of object;
TJavaScriptValueCallback = class(TJavaLocal, JValueCallback)
private
FOnResult: TJavaScriptResultEvent;
public
{ JValueCallback }
procedure onReceiveValue(value: JObject); cdecl;
public
property OnResult: TJavaScriptResultEvent read FOnResult write FOnResult;
end;
{$ENDIF}
———————————————
实现部分
{ TJavaScriptValueCallback }
procedure TJavaScriptValueCallback.onReceiveValue(value: JObject);
begin
if Assigned(FOnResult) then
FOnResult(Self, JStringToString(TJString.Wrap(value)).DeQuotedString(‘”‘));
end;
——————————————–
再写个函数封装 app 发送内容的:
class function TApp.EvaluateJavascript( script: string; wb: TWebBrowser; resValue: TJavaScriptValueCallback): Boolean;
var
view: jWebView;
begin
result := Supports(wb, JWebView, view);
if result then
view.evaluateJavascript( StringToJString( script), resValue);
end;
——————————————-
使用方式: 在 form 创建一个 TJavaScriptValueCallback , 然后处理它得到 网页返回的事件, 如:
JsValue := TJavaScriptValueCallback.Create;
JsValue.OnResult := OnJSValueCallBack;
procedure TFamBrowser.OnJSValueCallBack(Sender: TObject; const Result: string);
这里就是网页返回的地方, result 就是网页返回的内容