我正在开发一个Swift iOS应用程序,使用WKWebView
加载电子商务网站。
当用户在此购买产品时,结账页面允许用户使用加密货币进行支付。
当用户点击“在钱包中打开”时,该网站会发送一个window.postMessage(paymentData)
,其中payment data是一个js对象,其中包含比特币url。
我正在使用WKUserScript
和WKWebConfiguration
注入一个脚本,监听窗口消息,然后将数据发送到我的webkit.messageHandler
。
let source = """
window.addEventListener('message', function(e) { window.webkit.messageHandlers.iosListener.postMessage(JSON.stringify(e.data)) } )
"""
很遗憾,这段代码从未触发。
当我使用 Chrome 或 Safari 开发工具注入相同的 JavaScript 时,它可以正常工作。
我已经在 Stack Overflow 上搜索过了,在 WKWebView
中是否有关于 window.postMessage
的特殊条件,但迄今为止没有找到。
是否有可能捕获 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)")
}
window.postMessage(JSON.stringify(data), '*');
。 如果您有兴趣,我可以与您分享该网站的URL。 再次感谢。我已经为您的答案点赞。 - MFD3000injectionTime: .atDocumentStart
后,我成功地让它工作了。 - Janno TeelematDocumentStart
时工作。如果这个答案对OP有用的话,那就很有趣了。 - testing