XMLHttpRequest Post 数据未在 Android 10+ 上发送(空流)

问题描述 投票:0回答:1

德尔福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;
android xmlhttprequest firemonkey twebbrowser
1个回答
0
投票

这是 TIdHTTPServer 中新 Delphi 11.3 中的错误。 在 Android 上运行时,TIdHTTPServer 将其事件属性设置为 nil。

© www.soinside.com 2019 - 2024. All rights reserved.