Skip to content

Commit 00b53a9

Browse files
author
Liu Liming
committed
Consume startupMessageQueue after bridge injection
1 parent 5262e9b commit 00b53a9

File tree

2 files changed

+26
-8
lines changed

2 files changed

+26
-8
lines changed

WKWebViewJavascriptBridge/WKWebViewJavascriptBridge.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,8 @@ public class WKWebViewJavascriptBridge: NSObject {
7979
}
8080

8181
extension WKWebViewJavascriptBridge: WKWebViewJavascriptBridgeBaseDelegate {
82-
func evaluateJavascript(javascript: String) {
83-
webView?.evaluateJavaScript(javascript, completionHandler: nil)
82+
func evaluateJavascript(javascript: String, completion: CompletionHandler) {
83+
webView?.evaluateJavaScript(javascript, completionHandler: completion)
8484
}
8585
}
8686

WKWebViewJavascriptBridge/WKWebViewJavascriptBridgeBase.swift

+24-6
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,15 @@
99
import Foundation
1010

1111
protocol WKWebViewJavascriptBridgeBaseDelegate: AnyObject {
12-
func evaluateJavascript(javascript: String)
12+
typealias CompletionHandler = ((Any?, Error?) -> Void)?
13+
14+
func evaluateJavascript(javascript: String, completion: CompletionHandler)
15+
}
16+
17+
extension WKWebViewJavascriptBridgeBaseDelegate {
18+
func evaluateJavascript(javascript: String) {
19+
evaluateJavascript(javascript: javascript, completion: nil)
20+
}
1321
}
1422

1523
@available(iOS 9.0, *)
@@ -21,13 +29,13 @@ public class WKWebViewJavascriptBridgeBase: NSObject {
2129
public typealias Message = [String: Any]
2230

2331
weak var delegate: WKWebViewJavascriptBridgeBaseDelegate?
24-
var startupMessageQueue = [Message]()
32+
var startupMessageQueue: [Message]? = []
2533
var responseCallbacks = [String: Callback]()
2634
var messageHandlers = [String: Handler]()
2735
var uniqueId = 0
2836

2937
func reset() {
30-
startupMessageQueue = [Message]()
38+
startupMessageQueue = nil
3139
responseCallbacks = [String: Callback]()
3240
uniqueId = 0
3341
}
@@ -88,15 +96,25 @@ public class WKWebViewJavascriptBridgeBase: NSObject {
8896

8997
func injectJavascriptFile() {
9098
let js = WKWebViewJavascriptBridgeJS
91-
delegate?.evaluateJavascript(javascript: js)
99+
delegate?.evaluateJavascript(javascript: js, completion: { [weak self] (_, error) in
100+
guard let self = self else { return }
101+
if let error = error {
102+
self.log(error)
103+
return
104+
}
105+
self.startupMessageQueue?.forEach({ (message) in
106+
self.dispatch(message: message)
107+
})
108+
self.startupMessageQueue = nil
109+
})
92110
}
93111

94112
// MARK: - Private
95113
private func queue(message: Message) {
96-
if startupMessageQueue.isEmpty {
114+
if startupMessageQueue == nil {
97115
dispatch(message: message)
98116
} else {
99-
startupMessageQueue.append(message)
117+
startupMessageQueue?.append(message)
100118
}
101119
}
102120

0 commit comments

Comments
 (0)