How to intercept ajax post request payload from flutter_inappwebview?

139 Views Asked by At

I'm developing one web view flutter program and got stuck into one problem.

I can't get payload from ajax post request.

For example, I want to get login information when I click login button on the web view. I tried like this.

flutter sdk version:flutter_windows_3.13.6-stable

webview_flutter: ^4.4.1

path_provider: ^2.1.1

InAppWebView(
        initialUrlRequest: URLRequest(url: Uri.parse('https://example.com')),
        onWebViewCreated: (controller) {
          _webViewController = controller;
          _webViewController.addJavaScriptHandler(
            handlerName: 'postPayload',
            callback: (args) {
              final payload = args.first;
              print('Received AJAX post payload: $payload');
            },
          );
        },
        onLoadStart: (controller, url) {
          print('Page started loading: $url');
        },
        onLoadStop: (controller, url) {
          print('Page finished loading: $url');
        },
        onLoadError: (controller, url, code, message) {
          print('Page resource error: $code - $message');
        },
        shouldOverrideUrlLoading: (controller, navigationAction) {
          final url = navigationAction.request.url;
          if (url.startsWith('https://www.youtube.com/')) {
            print('Blocking navigation to $url');
            return NavigationActionPolicy.CANCEL;
          }
          if (url.path.endsWith('.png') || url.path.endsWith('.jpg') || url.path.endsWith('.gif')) {
            return NavigationActionPolicy.CANCEL;
          }
          print('Allowing navigation to $url');
          return NavigationActionPolicy.ALLOW;
        },
        onLoadHttpError: (controller, url, statusCode, description) {
          print('HTTP error: $statusCode - $description');
        },
        onAjaxReadyStateChange: (controller, request) {
          if (request.method == 'POST') {
            final payload = request.requestData;
            print('Received AJAX post payload: $payload');
          }
        },
      ),
    );

But onAjaxReadyStateChange handler, no response. Please help me. Thank you.

0

There are 0 best solutions below