99import Foundation
1010
1111protocol 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