Delphi 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向self发送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
请求中可能需要一些参数?或者应用程序有更多权限?
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;