From d0015ebe2354deaff3bb1efb9c66e9e7625c16eb Mon Sep 17 00:00:00 2001 From: phil zhang Date: 2020年8月13日 13:12:37 +0800 Subject: [PATCH 1/7] Update WKWebViewJavascriptBridgeBase.swift fixed: When a handler is not registered, other calls in the queue cannot be executed --- WKWebViewJavascriptBridge/WKWebViewJavascriptBridgeBase.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/WKWebViewJavascriptBridge/WKWebViewJavascriptBridgeBase.swift b/WKWebViewJavascriptBridge/WKWebViewJavascriptBridgeBase.swift index 2431b87..e6c5d30 100644 --- a/WKWebViewJavascriptBridge/WKWebViewJavascriptBridgeBase.swift +++ b/WKWebViewJavascriptBridge/WKWebViewJavascriptBridgeBase.swift @@ -76,10 +76,10 @@ public class WKWebViewJavascriptBridgeBase: NSObject { } } - guard let handlerName = message["handlerName"] as? String else { return } + guard let handlerName = message["handlerName"] as? String else { continue } guard let handler = messageHandlers[handlerName] else { log("NoHandlerException, No handler for message from JS: \(message)") - return + continue } handler(message["data"] as? [String : Any], callback) } From 5262e9bad0ec9a55898d55e5d5a3b3348d60ed15 Mon Sep 17 00:00:00 2001 From: lision Date: 2020年8月17日 11:18:28 +0800 Subject: [PATCH 2/7] MOD: update version to 1.2.1 --- WKWebViewJavascriptBridge.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WKWebViewJavascriptBridge.podspec b/WKWebViewJavascriptBridge.podspec index 7ab6275..783b95a 100644 --- a/WKWebViewJavascriptBridge.podspec +++ b/WKWebViewJavascriptBridge.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |s| s.name = 'WKWebViewJavascriptBridge' s.summary = 'A Bridge for Sending Messages between Swift and JavaScript in WKWebViews.' - s.version = '1.2.0' + s.version = '1.2.1' s.license = { :type => 'MIT', :file => 'LICENSE' } s.author = { 'Lision' => 'lisionmail@gmail.com' } s.social_media_url = 'https://lision.me/' From 00b53a94a45258615bf585ab6c41e26e585b75b0 Mon Sep 17 00:00:00 2001 From: Liu Liming Date: Tue, 5 Jan 2021 19:31:43 +0800 Subject: [PATCH 3/7] Consume startupMessageQueue after bridge injection --- .../WKWebViewJavascriptBridge.swift | 4 +-- .../WKWebViewJavascriptBridgeBase.swift | 30 +++++++++++++++---- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/WKWebViewJavascriptBridge/WKWebViewJavascriptBridge.swift b/WKWebViewJavascriptBridge/WKWebViewJavascriptBridge.swift index 6d1a039..16ccfab 100644 --- a/WKWebViewJavascriptBridge/WKWebViewJavascriptBridge.swift +++ b/WKWebViewJavascriptBridge/WKWebViewJavascriptBridge.swift @@ -79,8 +79,8 @@ public class WKWebViewJavascriptBridge: NSObject { } extension WKWebViewJavascriptBridge: WKWebViewJavascriptBridgeBaseDelegate { - func evaluateJavascript(javascript: String) { - webView?.evaluateJavaScript(javascript, completionHandler: nil) + func evaluateJavascript(javascript: String, completion: CompletionHandler) { + webView?.evaluateJavaScript(javascript, completionHandler: completion) } } diff --git a/WKWebViewJavascriptBridge/WKWebViewJavascriptBridgeBase.swift b/WKWebViewJavascriptBridge/WKWebViewJavascriptBridgeBase.swift index e6c5d30..a544a77 100644 --- a/WKWebViewJavascriptBridge/WKWebViewJavascriptBridgeBase.swift +++ b/WKWebViewJavascriptBridge/WKWebViewJavascriptBridgeBase.swift @@ -9,7 +9,15 @@ import Foundation protocol WKWebViewJavascriptBridgeBaseDelegate: AnyObject { - func evaluateJavascript(javascript: String) + typealias CompletionHandler = ((Any?, Error?) -> Void)? + + func evaluateJavascript(javascript: String, completion: CompletionHandler) +} + +extension WKWebViewJavascriptBridgeBaseDelegate { + func evaluateJavascript(javascript: String) { + evaluateJavascript(javascript: javascript, completion: nil) + } } @available(iOS 9.0, *) @@ -21,13 +29,13 @@ public class WKWebViewJavascriptBridgeBase: NSObject { public typealias Message = [String: Any] weak var delegate: WKWebViewJavascriptBridgeBaseDelegate? - var startupMessageQueue = [Message]() + var startupMessageQueue: [Message]? = [] var responseCallbacks = [String: Callback]() var messageHandlers = [String: Handler]() var uniqueId = 0 func reset() { - startupMessageQueue = [Message]() + startupMessageQueue = nil responseCallbacks = [String: Callback]() uniqueId = 0 } @@ -88,15 +96,25 @@ public class WKWebViewJavascriptBridgeBase: NSObject { func injectJavascriptFile() { let js = WKWebViewJavascriptBridgeJS - delegate?.evaluateJavascript(javascript: js) + delegate?.evaluateJavascript(javascript: js, completion: { [weak self] (_, error) in + guard let self = self else { return } + if let error = error { + self.log(error) + return + } + self.startupMessageQueue?.forEach({ (message) in + self.dispatch(message: message) + }) + self.startupMessageQueue = nil + }) } // MARK: - Private private func queue(message: Message) { - if startupMessageQueue.isEmpty { + if startupMessageQueue == nil { dispatch(message: message) } else { - startupMessageQueue.append(message) + startupMessageQueue?.append(message) } } From 12d35a341553e2f5866786644d6b20a8d69662c8 Mon Sep 17 00:00:00 2001 From: CodingBot000 <75989725+codingbot000@users.noreply.github.com> Date: Tue, 6 Jul 2021 22:03:25 +0900 Subject: [PATCH 4/7] Update README.md typo correction --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6b2be4f..65a2679 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ The reason for the iOS platform cross-domain access vulnerability is due to UIWe - **Swift Support:** Swift 3.2 ~ 5 Support. - **High Performance:** The messaging performance is higher than intercept requests. - **High Speed:** No need to consider alert box safety timeout. -- **Lightwight:** This framework contains only 3 files. +- **Lightweight:** This framework contains only 3 files. - **Non-intrusive:** There is no need to make the webview class inherit from other base class. # Usage From 44d43241af4983191b25d38e0595b05275a8376e Mon Sep 17 00:00:00 2001 From: lision Date: 2021年8月12日 15:55:01 +0800 Subject: [PATCH 5/7] ADD: add swift_version spec field --- WKWebViewJavascriptBridge.podspec | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/WKWebViewJavascriptBridge.podspec b/WKWebViewJavascriptBridge.podspec index 783b95a..4b6a996 100644 --- a/WKWebViewJavascriptBridge.podspec +++ b/WKWebViewJavascriptBridge.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |s| s.name = 'WKWebViewJavascriptBridge' s.summary = 'A Bridge for Sending Messages between Swift and JavaScript in WKWebViews.' - s.version = '1.2.1' + s.version = '1.2.2' s.license = { :type => 'MIT', :file => 'LICENSE' } s.author = { 'Lision' => 'lisionmail@gmail.com' } s.social_media_url = 'https://lision.me/' @@ -10,4 +10,5 @@ Pod::Spec.new do |s| s.source_files = 'WKWebViewJavascriptBridge/*.{h,swift}' s.platform = :ios, '9.0' s.requires_arc = true + s.swift_version = '5.0' end From 7e82cefe5adabcc7314e65a0a7eff4da021d37bd Mon Sep 17 00:00:00 2001 From: lision Date: 2021年8月12日 15:59:06 +0800 Subject: [PATCH 6/7] MOD: update .swift-version file --- .swift-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.swift-version b/.swift-version index bf77d54..819e07a 100644 --- a/.swift-version +++ b/.swift-version @@ -1 +1 @@ -4.2 +5.0 From 5a0bd0e3bd677a21a649226f5d20b7c1e4330145 Mon Sep 17 00:00:00 2001 From: Thomas Skowron Date: 2021年11月26日 19:00:38 +0100 Subject: [PATCH 7/7] Package.swift definition --- Package.swift | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Package.swift diff --git a/Package.swift b/Package.swift new file mode 100644 index 0000000..bb0cc27 --- /dev/null +++ b/Package.swift @@ -0,0 +1,23 @@ +// swift-tools-version:5.5 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let package = Package( + name: "WKWebViewJavascriptBridge", + products: [ + // Products define the executables and libraries a package produces, and make them visible to other packages. + .library( + name: "WKWebViewJavascriptBridge", + targets: ["WKWebViewJavascriptBridge"]), + ], + dependencies: [], + targets: [ + // Targets are the basic building blocks of a package. A target can define a module or a test suite. + // Targets can depend on other targets in this package, and on products in packages this package depends on. + .target( + name: "WKWebViewJavascriptBridge", + dependencies: [], + path: "WKWebViewJavascriptBridge/"), + ] +)

AltStyle によって変換されたページ (->オリジナル) /