gpt4 book ai didi

javascript - 使用 Javascript 处理 HTML 和 Swift 之间的交互

转载 作者:搜寻专家 更新时间:2023-10-31 23:05:50 30 4
gpt4 key购买 nike

WKWebView 无法在加载的网页中触发 javascript。

场景:如果用户点击网站中的图片,它应该得到更新。

如果用户点击图片,使用 javascript 更新网站上的图片。

  1. 在项目中包含 .js 文件
  2. 已配置 WKWebview
  3. 启用 JavaScript
  4. 在 WKWebview 中添加脚本

JS 文件中的函数如:

function captureImage(bucket,fileName){
window.webkit.messageHandlers.captureImage.postMessage("showCamera")
}

像这样在 Swift 中访问这个函数:

      webViewPWA.configuration.userContentController.add(self, name: "captureImage")


///This function handles the event generated by javascript
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
print("Webview Message received: \(message.name) with body: \(message.body)")
if (message.name == "captureImage"){
print("\(message.body)")

let body = message.body
if let action:String = body as? String {
switch action {
case "showCamera":
print("camera image triggering, capture image for JS")
//take necessary action
break
default:
break
}
}
}
return
}

提前致谢!

最佳答案

UIImagePickerControllerDelegate 方法中在设备上捕获图片后,如下所示:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
imagePicker.dismiss(animated: true, completion: nil)
imageView.image = info[.originalImage] as? UIImage
}

您可以使用 evaluateJavaScript() 在 WKWebView 中运行您想要的任何 JS,并在 Swift 中获得结果。

webView.evaluateJavaScript("document.getElementById('someElement').innerText") { (response, error) in
guard error == nil else {
          print("evaluateJavaScript error -- \(String(describing: error))")
          return
        }
        print("evaluateJavaScript response -- \(String(describing: response))")
}

如果有类似于 WebBridge.js 的东西,它提供了与 iOS 中的构建 WKWebView 和他的 android webview 进行通信的功能,那就太好了

在 WebBridge.js 中你可以定义:

/* install global handler for WebView to call methods */
if (!window.WebBridge) {
window.WebBridge = (function () {
var actions = []


return {
receive: function (actionName, json) {
if (typeof actions[actionName] !== 'undefined') {
actions[actionName](json)
}
},
registerActionHandler: function (actionName, method) {
actions[actionName] = method
}
}
})()
}

然后从 Swift 文件中您可以缩小 JS 调用的结构:

self.webView.evaluateJavaScript("WebBridge.receive('yourCustomActionName', '{\"yourRey\": \"yourValue\"}')") { (response, error) in
        guard error == nil else {
          print("evaluateJavaScript error -- \(String(describing: error))")
          return
        }
        print("evaluateJavaScript response -- \(String(describing: response))")
      }

关于javascript - 使用 Javascript 处理 HTML 和 Swift 之间的交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57568259/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com