我正在开发一个 swift ios 应用程序,它使用WKWebView
加载电子商务网站。
当用户在这里购买产品时,结帐页面允许用户用加密货币付款。
当用户点击“在钱包中打开”时,网站会弹出一个
window.postMessage(paymentData)
其中支付数据是一个 js 对象,其中包含比特币 url。
我正在使用一个WKUserScript
with 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
in 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)")
}