Я разрабатываю быстрое приложение для ios, которое использует WKWebView
для загрузки сайта электронной коммерции.
Когда пользователь покупает продукт здесь, страница оформления заказа позволяет ему совершать платежи в криптовалюте.
Когда пользователь нажимает кнопку «Открыть в кошельке», сайт снимает
window.postMessage(paymentData)
где данные платежа - это объект js с URL-адресом биткойна.
Я использую WKUserScript
с WKWebConfiguration
, чтобы внедрить скрипт, который прослушивает оконное сообщение, а затем запускает данные для моего webkit.messageHandler.
let source = """
window.addEventListener('message', function(e) { window.webkit.messageHandlers.iosListener.postMessage(JSON.stringify(e.data)) } )
"""
К сожалению, этот код никогда не срабатывает.
Когда я использую Chrome или Safari Devtools для внедрения одного и того же JavaScript, он работает просто отлично.
Я исследовал переполнение стека, чтобы посмотреть, есть ли специальное условие для window.postMessage
в WKWebView
, но до сих пор не повезло.
Можно ли перехватить событие window.postMessage()
и передать данные о событии обратно в мое приложение ios?
Спасибо заранее !!!!
Вот мой существующий код.
let webConfiguration = WKWebViewConfiguration()
let source = """
window.addEventListener('message', function(e) { window.webkit.messageHandlers.iosListener.postMessage(JSON.stringify(e.data)) } )
"""
let script = WKUserScript(source: source, injectionTime: .atDocumentEnd, forMainFrameOnly: false)
userContentController.addUserScript(script)
userContentController.add(self, name: "iosListener")
webConfiguration.userContentController = userContentController
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.uiDelegate = self
webView.navigationDelegate = self
webView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(webView)
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
print("message body: \(message.body)")
print("message frameInfo: \(message.frameInfo)")
}