Skip to content

Commit e5491e8

Browse files
committed
fix framework add injectJavascript
1 parent 694b03f commit e5491e8

2 files changed

Lines changed: 26 additions & 14 deletions

File tree

WKWebViewJavascriptBridge/WKWebViewJavascriptBridge.swift

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,17 @@ import WebKit
1111

1212
@available(iOS 9.0, *)
1313
public class WKWebViewJavascriptBridge: NSObject {
14+
private let injectJavascript = "iOS_Native_InjectJavascript"
15+
1416
private weak var webView: WKWebView!
1517
private var base: WKWebViewJavascriptBridgeBase!
1618

1719
public init(webView: WKWebView) {
18-
self.webView = webView
1920
super.init()
21+
self.webView = webView
22+
self.webView.configuration.userContentController.add(self, name: injectJavascript)
23+
base = WKWebViewJavascriptBridgeBase()
24+
base.delegate = self
2025
}
2126

2227
public func reset() {
@@ -47,8 +52,18 @@ public class WKWebViewJavascriptBridge: NSObject {
4752
}
4853
}
4954

55+
extension WKWebViewJavascriptBridge: WKWebViewJavascriptBridgeBaseDelegate {
56+
func evaluateJavascript(javascript: String) {
57+
self.webView.evaluateJavaScript(javascript, completionHandler: nil)
58+
}
59+
}
60+
5061
extension WKWebViewJavascriptBridge: WKScriptMessageHandler {
5162
public func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
52-
self.flushMessageQueue()
63+
if message.name == injectJavascript {
64+
self.base.injectJavascriptFile()
65+
} else {
66+
self.flushMessageQueue()
67+
}
5368
}
5469
}

WKWebViewJavascriptBridge/WKWebViewJavascriptBridgeBase.swift

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,7 @@ public class WKWebViewJavascriptBridgeBase: NSObject {
6666
var callback: Callback?
6767
if let callbackID = message["callbackID"] {
6868
callback = { (_ responseData: Any?) -> Void in
69-
guard responseData != nil else {
70-
return
71-
}
69+
guard responseData != nil else { return }
7270

7371
let msg = ["responseID": callbackID, "responseData": responseData!] as Message
7472
self.queue(message: msg)
@@ -79,9 +77,7 @@ public class WKWebViewJavascriptBridgeBase: NSObject {
7977
}
8078
}
8179

82-
guard let handlerName = message["handlerName"] as? String else {
83-
return
84-
}
80+
guard let handlerName = message["handlerName"] as? String else { return }
8581
guard let handler = self.messageHandlers[handlerName] else {
8682
log("NoHandlerException, No handler for message from JS: \(message)")
8783
return
@@ -91,6 +87,11 @@ public class WKWebViewJavascriptBridgeBase: NSObject {
9187
}
9288
}
9389

90+
func injectJavascriptFile() {
91+
let js = WKWebViewJavascriptBridgeJS
92+
self.delegate?.evaluateJavascript(javascript: js)
93+
}
94+
9495
// MARK: - Private
9596
private func queue(message: Message) {
9697
if self.startupMessageQueue.isEmpty {
@@ -101,9 +102,7 @@ public class WKWebViewJavascriptBridgeBase: NSObject {
101102
}
102103

103104
private func dispatch(message: Message) {
104-
guard var messageJSON = self.serialize(message: message, pretty: false) else {
105-
return
106-
}
105+
guard var messageJSON = self.serialize(message: message, pretty: false) else { return }
107106

108107
messageJSON = messageJSON.replacingOccurrences(of: "\\", with: "\\\\")
109108
messageJSON = messageJSON.replacingOccurrences(of: "\"", with: "\\\"")
@@ -138,9 +137,7 @@ public class WKWebViewJavascriptBridgeBase: NSObject {
138137

139138
private func deserialize(messageJSON: String) -> [Message]? {
140139
var result = [Message]()
141-
guard let data = messageJSON.data(using: .utf8) else {
142-
return nil
143-
}
140+
guard let data = messageJSON.data(using: .utf8) else { return nil }
144141
do {
145142
result = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as! [WKWebViewJavascriptBridgeBase.Message]
146143
} catch let error {

0 commit comments

Comments
 (0)