WKWebView與JS互動
APP有時會套一個網頁在裡面,此時Native與網頁JS進行通訊也是經常要用的到的。貼上小小的粟子
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 此方法只在指定的時間點有效
forMainFrameOnly: true) // 只新增到mainFrame中 //configuration.userContentController.addUserScript(script) //JS呼叫Native時要註冊此方法,注意名字是個Key。這裡要注意第一個引數是要實現了WKScriptMessageHandler介面的類名 configuration.userContentController.addScriptMessageHandler(self, name: "ScanQRCode")
//好了,現在網頁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端會觸發此方法
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呼叫網頁的方法或者執行指令碼可以用到以下程式碼
self.wkBrowser.evaluateJavaScript("$(#"abc").val(`I am come from native`)", completionHandler: nil)
相關文章
- js 與WKWebView 互動JSWebView
- WKWebView詳解&WKWebVieW和JS互動WebViewJS
- WKWebView和WebView與JS的互動方式WebViewJS
- OC WKWebView的JS與OC互動、Cookie管理WebViewJSCookie
- iOS中WKWebView互動使用總結iOSWebView
- JS互動 點選WKWebView中的圖片實現預覽效果JSWebView
- webview與JS的互動WebViewJS
- WKWebView與Js實戰(OC版)WebViewJS
- oc 與 js互動之vue.jsVue.js
- oc 與js 的原生互動JS
- iOS WKWebView UI增強(上拉重新整理,JS互動,載入進度條)iOSWebViewUIJS
- Android webview 與 js(Vue) 互動AndroidWebViewJSVue
- iOS 與 JS 互動手冊 - JavaScriptCoreiOSJSJavaScript
- iOS 與JS Html常見互動iOSJSHTML
- angularjs與伺服器互動AngularJS伺服器
- Flutter使用JsBridge與WebView互動FlutterJSWebView
- Flutter WebView與JS互動簡易指南FlutterWebViewJS
- JS 與 OC 互動的三種方法JS
- UIWebview 與WKWebviewUIWebView
- JS原生互動JS
- iOS與JS互動之UIWebView-JavaScriptCore框架iOSJSUIWebViewJavaScript框架
- WebView與JS的互動,以及注意事項WebViewJS
- iOS 和 H5 互動那些事 (UIWebView、WKWebView 總結篇)iOSH5UIWebView
- WPF和js互動 WebBrowser資料互動JSWeb
- iOS下JS與OC互相呼叫(六)--WKWebView + WebViewJavascriptBridgeiOSJSWebViewJavaScript
- iOS與JS互動之UIWebView協議攔截iOSJSUIWebView協議
- iOS 與 JS 互動開發知識總結iOSJS
- iOS開發:網頁JS與OC互動(JavaScriptCore)iOS網頁JSJavaScript
- iOS下JS與OC互相呼叫(二)--WKWebView 攔截URLiOSJSWebView
- Android中JS與Java的極簡互動庫-SimpleJavaJsBridgeAndroidJSJava
- GraphQL.js 與服務端互動的新方式JS服務端
- AlloyTouch與three.js 3D模型互動JS3D模型
- 關於php後端與js前端互動問題PHP後端JS前端
- Android與JS互調AndroidJS
- Android webview JS 互動AndroidWebViewJS
- Cordova JS OC互動方法JS
- jsp的互動性JS
- iOS 中UIWebView與WKWebViewiOSUIWebView