iosUIWebView與js的簡單互動swift3版
在開發過程中,我們可能遇到ios程式碼與js互動的情況,本人第一次使用遇到了很多坑,這裡紀錄一下,方便自己,也方便需要的人。
1.第一步先建一個介面(協議)並繼承JSExport
這裡實現兩個方法提供給js呼叫的方法
importJavaScriptCore
@objcprotocolSwiftJavaScriptDelegate:JSExport{
funcshow()
funcshowAlert(_str:String,_msg:String)
}
2.第二步需要寫一個類去實現上一步的介面(協議)(注意:1.這裡必須要繼承nsobject否則會報錯,2.如果要傳引數的話一定要寫成
類似與 funcshowAlert(_str:String,_msg:String),_ str:String 這個“_”一定要加不然無法呼叫(呼叫無效果),在swift3.0中就這樣,其他版本沒有測試就不清楚了。
)
@objcclassSwiftJavaScriptModel:NSObject,SwiftJavaScriptDelegate{
funcshow() {
print(“js呼叫我了”)
}
funcshowAlert(_str:String,_msg:String){
print(“js呼叫我了:”,str,msg)
}
}
3.開始在控制器中測試
//
//ViewController.swift
//WEBJSTest
//
//Created by admin on 17/8/5.
//Copyright © 2017年tdin360. All rights reserved.
//
importUIKit
importWebKit
importJavaScriptCore
classViewController:UIViewController,UIWebViewDelegate{
varcontext:JSContext!
overridefuncviewDidLoad() {
super.viewDidLoad()
self.setupUI()
}
funcsetupUI( ) {
self.view.addSubview(webView)
leturl =Bundle.main.path(forResource:”index”, ofType:”html”)
self.webView.loadRequest(URLRequest(url:URL(string:url!)!))
self.webView.delegate=self
self.view.addSubview(btn)
}
lazyvarwebView:UIWebView={
letwebView =UIWebView(frame:self.view.bounds)
returnwebView
}()
//用於點選呼叫js的按鈕
lazyvarbtn:UIButton={
letbtn =UIButton(frame:CGRect(x:0,y:300,width:100,height:40))
btn.backgroundColor=UIColor.blue
btn.setTitle(“呼叫js”, for: .normal)
btn.addTarget(self, action:#selector(onClick), for: .touchUpInside)
returnbtn
}()
//swift呼叫js
funconClick(){
letf =context?.objectForKeyedSubscript(“swift”)
_=f?.call(withArguments: [[“name”:”admin”,”pass”:”fdsfds”]])
}
funcwebViewDidFinishLoad(_webView:UIWebView) {
letmodel =SwiftJavaScriptModel()
//獲取context
context=self.webView.value(forKeyPath:”documentView.webView.mainFrame.javaScriptContext”)as!JSContext
//這裡註冊一個標示給js訪問
context.setObject(model, forKeyedSubscript:”model”as(NSCopying&NSObjectProtocol)!)
leturl =Bundle.main.url(forResource:”index”, withExtension:”html”)
context.evaluateScript(try?String(contentsOf: url!, encoding:String.Encoding.utf8))
context.exceptionHandler= {
(context, exception)in
print(“exception錯誤@”, exception ??””)
}
}
overridefuncdidReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
4.html程式碼
<html>
<meta charset=”utf-8″>
<title>ios js互動測試</title>
<head>
<script>
//這個提交給swift呼叫並傳引數
function swift(obj){
alert(“swift呼叫我了”+obj[“name”]+”–“+obj[“pass”]);
}
</script>
</head>
<body>
<button onclick=”model.showAlert(`引數1`,`引數2`)”>js呼叫swift有參的方法</button>
<button onclick=”model.show()” >js呼叫swift無引數方法</button>
</body>
</html>
整個過程就是這樣的,這裡貼了原始碼,如果遇到問題歡迎留言,有什麼更好的方法歡迎一起交流。
相關文章
- C# 與 javascript 簡單互動C#JavaScript
- Servlet實現、與html的簡單互動ServletHTML
- 簡單互動
- Flutter WebView與JS互動簡易指南FlutterWebViewJS
- webview與JS的互動WebViewJS
- Android中JS與Java的極簡互動庫-SimpleJavaJsBridgeAndroidJSJava
- js 與WKWebView 互動JSWebView
- WKWebView與JS互動WebViewJS
- oc 與js 的原生互動JS
- pixi.js 簡單互動事件(點選、縮放、平移)JS事件
- WKWebView和WebView與JS的互動方式WebViewJS
- JS 與 OC 互動的三種方法JS
- Node之簡單的前後端互動後端
- oc 與 js互動之vue.jsVue.js
- WebView與JS的互動,以及注意事項WebViewJS
- OC WKWebView的JS與OC互動、Cookie管理WebViewJSCookie
- Android webview 與 js(Vue) 互動AndroidWebViewJSVue
- iOS 與 JS 互動手冊 - JavaScriptCoreiOSJSJavaScript
- iOS 與JS Html常見互動iOSJSHTML
- angularjs與伺服器互動AngularJS伺服器
- 簡單剖析智慧語音互動技術
- Electron學習(三)之簡單互動操作
- Flutter使用JsBridge與WebView互動FlutterJSWebView
- 簡單的使用者登入頁面與後臺資料庫的互動資料庫
- jsp的互動性JS
- Protobuf簡單應用-JSON和Proto Buffer互轉JSON
- JS原生互動JS
- GraphQL.js 與服務端互動的新方式JS服務端
- pycharm下與spark的互動 詳細配置說明以及spark 執行簡單例子PyCharmSpark單例
- javascript快速入門2--變數,小學生數學與簡單的互動JavaScript變數
- iOS與JS互動之UIWebView-JavaScriptCore框架iOSJSUIWebViewJavaScript框架
- Play框架與NodeJS的簡單比較框架NodeJS
- js與&&運算子簡單介紹JS
- WPF和js互動 WebBrowser資料互動JSWeb
- C# 簡單的學生資訊管理系統,好看的UI介面,與資料庫互動C#UI資料庫
- WKWebViewJavascriptBridge - 優雅的 iOS 與 JS 互動層框架(Swift)WebViewJavaScriptiOSJS框架Swift
- 深度學習js與安卓的互動以及WebView的那些坑深度學習JS安卓WebView
- Android 與WebView中的js程式碼的互動記錄AndroidWebViewJS