Обнаружение изменений URL в Flutter iFrame

#html #flutter #dart #iframe #webview

#HTML #flutter #dart #iframe #webview

Вопрос:

Я пытаюсь воспроизвести функциональность Webview в моем веб-приложении с помощью следующего кода:

 iframeElement = IFrameElement()
      ..src = checkoutUrl
      ..style.border = 'none'
      ..width = '800'
      ..height = '400'
      ..onChange.listen((event) {
        print("change");
        print(event.currentTarget);
      })
      ..onLoad.listen((Event event) {
        isLoadingPage = false;
      });
    ui.platformViewRegistry.registerViewFactory(
      'webpage',
      (int viewId) => iframeElement,
    );
  

Моя цель — обнаружить изменения в URL-адресе, чтобы я мог выполнить операцию оформления заказа с помощью Paypal.

Проблема в том, что я, похоже, не могу ничего получить от слушателей, поэтому мне не удается успешно перенаправить на веб-приложение после успешной оплаты.

Ответ №1:

Я нашел способ выполнить необходимую мне операцию в следующем руководстве: https://itnext.io/flutter-web-razorpay-payment-gateway-integration-792d6e015409

В частности, можно прослушать некоторые изменения в iFrame, но требуется немного деталей:

1 — Определение window.onMessage стороны дротика

 window.onMessage.forEach((element) {
          print('Event Received in callback: ${element.data}');
        });
  

2 . Создание HTML-файла, содержащего ваш скрипт, импорт его как src и отправка сообщений вашему родительскому устройству со следующим: window.parent.postMessage("Your data/message","*");

Это конкретное руководство было для RazorPay, но мне также удалось интегрировать Paypal без каких-либо проблем,

Ответ №2:

У меня была такая же проблема, но я не мог решить ее таким образом, потому что, как говорится в документации dart :

введите описание изображения здесь

единственное место, где вы можете получить изменения url и сообщения, — это окно, которое недоступно, если оно находится внутри iFrame, или, по крайней мере, я не смог найти способ сделать это. Мой обходной путь заключался в том, чтобы открыть ссылку с помощью url_launcher и установить перенаправление обратно в мое веб-приложение.

P.M. Попробуйте BodyElement вместо iFrame, тогда будет доступна опция window, и вы сможете прослушивать все, что происходит в элементе, но у него много проблем с загрузкой страниц, поэтому я решил не использовать его в конце.

Комментарии:

1. Спасибо за совет, не могли бы вы привести пример использования BodyElement? Я пытался использовать его, но не могу найти способ установить URL-адрес