9
9
import Foundation
10
10
11
11
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
+ }
13
21
}
14
22
15
23
@available ( iOS 9 . 0 , * )
@@ -21,13 +29,13 @@ public class WKWebViewJavascriptBridgeBase: NSObject {
21
29
public typealias Message = [ String : Any ]
22
30
23
31
weak var delegate : WKWebViewJavascriptBridgeBaseDelegate ?
24
- var startupMessageQueue = [ Message ] ( )
32
+ var startupMessageQueue : [ Message ] ? = [ ]
25
33
var responseCallbacks = [ String: Callback] ( )
26
34
var messageHandlers = [ String: Handler] ( )
27
35
var uniqueId = 0
28
36
29
37
func reset( ) {
30
- startupMessageQueue = [ Message ] ( )
38
+ startupMessageQueue = nil
31
39
responseCallbacks = [ String: Callback] ( )
32
40
uniqueId = 0
33
41
}
@@ -88,15 +96,25 @@ public class WKWebViewJavascriptBridgeBase: NSObject {
88
96
89
97
func injectJavascriptFile( ) {
90
98
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
+ } )
92
110
}
93
111
94
112
// MARK: - Private
95
113
private func queue( message: Message ) {
96
- if startupMessageQueue. isEmpty {
114
+ if startupMessageQueue == nil {
97
115
dispatch ( message: message)
98
116
} else {
99
- startupMessageQueue. append ( message)
117
+ startupMessageQueue? . append ( message)
100
118
}
101
119
}
102
120
0 commit comments