#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-адрес