德尔福11.3或10.4.1
AWB: TWebBrowser;
尝试这样打电话:
AWB.EvaluateJavaScript(
// 'alert( "var3=pmp ap pn q m" );' + #13 + #10 + // this work fine all time
'{ let xhr = new XMLHttpRequest();' + #13 + #10 +
'xhr.open("POST", "http://127.0.0.1:50001", false);' + #13 + #10 +
'xhr.send("var3=pmp ap pn q m");' + #13 + #10 +
' }');
js 警报工作正常!
我如何捕捉(dfm)(在所有版本的 Android 中都可以正常工作):
object IdHTTPServer1: TIdHTTPServer
Bindings = <
item
IP = '127.0.0.1'
Port = 50001
end>
DefaultPort = 50001
TerminateWaitTime = 1000
AutoStartSession = True
ParseParams = False
OnCommandGet = IdHTTPServer1CommandGet
end
我如何检查 IdHTTPServer1 工作正常:
var JSon : TStringStream;
Json := TStringStream.Create('Hee ll p', TEncoding.UTF8);
IdHTTP1.Post('http://127.0.0.1:50001', Json);
所以我可以通过 IdHTTP1 向自己发送 POST,但是 TWebBrowser 中的 js 有问题。 在 Android 8.1 (MIUI 9.6) 上工作正常,在 Android 10 (MIUI 12) 和 Android 12 (MIUI 14) 上不发送 POST。
我根据默认的Demo制作了示例项目。
C:\Users\Public\Documents\Embarcadero\Studio\22.0\Samples\Object Pascal\Mobile Snippets\WebBrowser
Request 中可能需要一些参数?或者应用程序有更多权限?
procedure TWebBrowserForm.IdHTTPServer1CommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
Stream : TStream;
begin
AResponseInfo.ResponseNo:= 200;
AResponseInfo.ContentText:= 'OKOK';
if ARequestInfo.Command = 'POST' then
begin
Stream := ARequestInfo.PostStream; // Here is nil, if come from Android 10+
if assigned(Stream) then
begin
FAnswer_Content := ReadStringFromStream(Stream, -1, IndyTextEncoding_UTF8);
end
end;
end;
这是 TIdHTTPServer 中新 Delphi 11.3 中的错误。 在 Android 上运行时,TIdHTTPServer 将其事件属性设置为 nil。