Swift version of WebViewJavascriptBridge with more simplified, friendly methods to send messages between Swift and JS in UIWebViews.
- Add these lines below to your Podfile
platform :ios, '8.0'
use_frameworks!
pod 'SwiftWebViewBridge'
- Install the pod by running
pod install
- import SwiftWebViewBridge
Drag SwiftWebViewJavascriptBridge
file to your project.
- Xcode9.0+
- iOS8.0+
- initialize a bridge with defaultHandler
- register handlers to handle different events
- send data / call handler on both sides
Generate a bridge with associated webView
let bridge = WebViewJavascriptBridge.init(webView: webView)
Register a handler for JavaScript calling
// take care of retain cycle!
bridge.register("logoutTime") {(data, responseCall) in
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "ReLgoinNotification"), object: nil)
}
bridge.send(["name": "tome", "age": 16, "uid": 0], response: { (data) in
debugPrint("response",data ?? "");
}, handler: "setParams")
func call(_ name: String, data: Any? = nil, response callback: ResponseCallback? = nil) Call JavaScript registered handler
bridge.call("setParams", data: ["X-token": "1234567890", "X-ui": "1", "X-macid": "123456789"]) { (data) in
debugPrint("response",data ?? "");
}
/// 1st param: responseData to JS
public typealias ResponseCallback = (Any?) -> Void
/// 1st param: jsonData sent from JS; 2nd param: responseCallback for sending
public typealias Handler = (Any?, ResponseCallback?) -> Void
public typealias Message = Dictionary<String, Any>
WebViewJavascriptBridge.logging = false //default true
bridge.init(function(message, responseCallback) {
log('JS got a message', message)
var data = { 'JS Responds' : 'Message received = )' }
responseCallback(data)
})
bridge.registerHandlerForSwift('alertReceivedParmas', function(data, responseCallback) {
log('ObjC called alertPassinParmas with', JSON.stringify(data))
alert(JSON.stringify(data))
var responseData = { 'JS Responds' : 'alert triggered' }
responseCallback(responseData)
})
bridge.sendDataToSwift('Say Hello Swiftly to Swift')
bridge.sendDataToSwift('Hi, anybody there?', function(responseData){
alert("got your response: " + JSON.stringify(responseData))
})
SwiftWebViewBridge.callSwiftHandler("printReceivedParmas", {"name": "小明", "age": "6", "school": "GDUT"}, function(responseData){
log('JS got responds from Swift: ', responseData)
})
SwiftWebViewJavascriptBridge is available under the MIT license. See the LICENSE file for more info.