代码之家  ›  专栏  ›  技术社区  ›  Станислав 000

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

  •  0
  • Станислав 000  · 技术社区  · 1 年前

    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;
    
    0 回复  |  直到 1 年前
        1
  •  0
  •   Станислав 000    1 年前

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