JSFunction
示例
要运行示例项目,请克隆仓库,然后从示例目录运行pod install
。
需求
安装
JSFunction 通过 CocoaPods 提供。要安装它,只需在 Podfile 中添加以下行
pod 'JSFunction'
作者
OutOfCode, [email protected] Bear, [email protected]
许可协议
JSFunction可在MIT许可下使用。有关更多信息,请参阅LICENSE文件。
使用
创建一个继承JSFunction的类。
@objcMembers
final class TestScript : NSObject, JSFunction {
var name: String = "test"
init(name: String) {
self.name = name
}
func message1() {
print("\(type(of: self)).\(#function)")
}
func message2(_ text: String) {
print("\(type(of: self)).\(#function) text = \(text)")
}
func message3(_ text1: String, _ text2: String) {
print("\(type(of: self)).\(#function) text1=\(text1) text2=\(text2)")
}
func json(_ json: String) {
guard let model = json.decode(type: JsonModel.self) else { return }
print("\(type(of: self)).\(#function) name=\(model.name), age=\(model.age)")
}
struct JsonModel : Decodable {
var name: String
var age: Int
}
}
添加WKUserContentController函数
class ViewController: UIViewController {
private var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
let script = TestScript(name: "test")
let userContentController = WKUserContentController()
userContentController.add(function: script)
let configuration = WKWebViewConfiguration()
configuration.userContentController = userContentController
webView = WKWebView(frame: view.frame, configuration: configuration)
view.addSubview(webView)
let localFile = Bundle.main.path(forResource: "test", ofType: "html") ?? ""
let url = URL(fileURLWithPath: localFile)
let request = URLRequest(url: url)
webView.load(request)
}
}
JavaScript方面
<script type="text/javascript">
function message1() {
var message = 'message1()';
window.webkit.messageHandlers.test.postMessage(message);
}
function message2() {
var message = 'message2(My Name is DH)';
window.webkit.messageHandlers.test.postMessage(message);
}
function message3() {
var message = 'message3(My Name is DH, 29 years old)';
window.webkit.messageHandlers.test.postMessage(message);
}
function json() {
var json = '{"name": "DH", "age": 29}';
var message = 'json(' + json + ')';
window.webkit.messageHandlers.test.postMessage(message);
}
</script>