APP有时会套一个网页在里面,此时Native与网页JS进行通信也是经常要用的到的。贴上小小的粟子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | let configuration = WKWebViewConfiguration () configuration . preferences = WKPreferences () configuration . preferences . javaScriptEnabled = true //通过js与webview内容交互配置 configuration . userContentController = WKUserContentController () //往HTML里面注入脚本 //let script = WKUserScript(source: "alert('success'); ",injectionTime: .AtDocumentStart,// 在载入时就添加JS 此方法只在指定的时间点有效<br> forMainFrameOnly: true) // 只添加到mainFrame中 //configuration.userContentController.addUserScript(script) //JS调用Native时要注册此方法,注意名字是个Key。这里要注意第一个参数是要实现了WKScriptMessageHandler接口的类名 configuration . userContentController . addScriptMessageHandler ( self , name : "ScanQRCode" )< br > //好了,现在网页JS可以通过以下脚本与Native通信了 //window.webkit.messageHandlers.<name>.postMessage({<content>}) for example: window.webkit.messageHandlers.ScanQRCode.postMessage({body:'hello guy'}) wkBrowser = WKWebView ( frame : CGRectMake ( 0 , 20 , self . view . bounds . width , self . view . bounds . height - 20 ), configuration : configuration ) |
实现WKScriptMessageHandler内的方法,JS调用Native端会触发此方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | func userContentController ( userContentController : WKUserContentController , didReceiveScriptMessage message : WKScriptMessage ) { if message . name == "ScanQRCode" { //这个名称与上面配置的要一样, //It work by this way //self.wkBrowser.evaluateJavaScript("document.getElementById('abc').innerHTML='sssssss'", completionHandler: nil) //通过message.body获取从JS传递过来的参数,可以传JSON或者其它格式 let id = message . body as ! String /*let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("ScanViewController") as! ScanViewController controller.delegate = self controller.htmlId = id //controller.view.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.9) self.modalPresentationStyle = UIModalPresentationStyle.FullScreen self.presentViewController(controller, animated: true, completion: { () -> Void in //controller.view.backgroundColor = UIColor.clearColor() })*/ } |
从Native调用网页的方法或者运行脚本可以用到以下代码
1 | self . wkBrowser . evaluateJavaScript ( "$(#\"abc\").val('I am come from native')" , completionHandler : nil ) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端