测试已测试 | ✗ |
Lang语言 | SwiftSwift |
许可证 | MIT |
Released上次发布 | 2017年1月 |
SwiftSwift版本 | 3.0 |
SPM支持SPM | ✗ |
由ShawnFoo维护。
是WebViewJavascriptBridge的Swift版本,提供了更加简化、友好的方法,在UIWebViews中发送Swift和JS之间的消息。
将SwiftWebViewBridge.swift
文件拖到您的项目中。
SwiftyJSON:SwiftyJSON使得在Swift中处理JSON数据变得简单。
Swift和JS之间的通信依赖于JSON消息。在闭包中获取的参数 jsonData 会通过以下方法进行反序列化。您可以将它简单地传递给SwiftJSON的指定初始化器JSON(jsonObject)
NSJSONSerialization.JSONObjectWithData(serilizedData, .AllowFragments)
func JSONObjectWithData(_ data: NSData, options opt: NSJSONReadingOptions) throws -> AnyObject
生成一个具有相关webView和默认处理器的桥接器,以处理js的消息,而不指定指定的处理器
let bridge = SwiftJavaScriptBridge.bridge(webView, defaultHandler: { data, responseCallback in
print("Swift received message from JS: \(data)")
responseCallback("Swift already got your msg, thanks")
})
为JavaScript调用注册处理器
// take care of retain cycle!
bridge.registerHandlerForJS(handlerName: "getSesionId", handler: { [unowned self] data, responseCallback in
let sid = self.session
responseCallback(["msg": "Swift has already finished its handler", "returnValue": [1, 2, 3]])
})
简单地向JS发送数据
bridge.sendDataToJS(["msg": "Hello JavaScript", "gift": ["100CNY", "1000CNY", "10000CNY"]])
使用回调闭包向JS发送数据
bridge.sendDataToJS("Did you received my gift, JS?", responseCallback: { data in
print("Receiving JS return gift: \(data)")
})
调用注册的JavaScript处理器
bridge.callJSHandler("alertReceivedParmas", params: ["msg": "JS, are you there?"], responseCallback: nil)
/// 1st param: responseData to JS
public typealias SWVBResponseCallBack = (NSDictionary) -> Void
/// 1st param: jsonData sent from JS; 2nd param: responseCallback for sending data back to JS
public typealias SWVBHandler = (AnyObject, @escaping SWVBResponseCallBack) -> Void
public typealias SWVBData = [String: Any]
SwiftWebViewBridge.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)
})
源代码包含非常详细的注释,这可以帮助你挖掘出Swift和JavaScript如何互相通信。此外,你还可以在UnminifiedJavascript文档中找到未压缩的JavaScript文件。