From 25ed2e062c7020967b9c7834530eda6de65a871b Mon Sep 17 00:00:00 2001 From: Peyman Oreizy Date: Wed, 18 Jan 2017 17:09:40 -0800 Subject: [PATCH 1/3] =?UTF-8?q?If=20there=E2=80=99s=20no=20Objective-C=20h?= =?UTF-8?q?andler,=20invoke=20the=20JS=20callback=20anyway?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WebViewJavascriptBridgeTests/BridgeTests.m | 17 +++++++++++++++++ Tests/WebViewJavascriptBridgeTests/echo.html | 9 +++++++++ .../WebViewJavascriptBridgeBase.m | 1 + 3 files changed, 27 insertions(+) diff --git a/Tests/WebViewJavascriptBridgeTests/BridgeTests.m b/Tests/WebViewJavascriptBridgeTests/BridgeTests.m index 06a139ea..f09371c4 100644 --- a/Tests/WebViewJavascriptBridgeTests/BridgeTests.m +++ b/Tests/WebViewJavascriptBridgeTests/BridgeTests.m @@ -138,6 +138,23 @@ - (void)classSpecificTestJavascriptReceiveResponse:(id)webView { }]; } + +- (void)testJavascriptInvokeUndefinedHandler { + [self classSpecificTestJavascriptInvokeUndefinedHandler:_uiWebView]; + [self classSpecificTestJavascriptInvokeUndefinedHandler:_wkWebView]; + [self waitForExpectationsWithTimeout:timeoutSec handler:NULL]; +} +- (void)classSpecificTestJavascriptInvokeUndefinedHandler:(id)webView { + WebViewJavascriptBridge *bridge = [self bridgeForWebView:webView]; + loadEchoSample(webView); + XCTestExpectation *callbackInvocked = [self expectationWithDescription:@"Callback invoked"]; + [bridge callHandler:@"jsInvokeUndefinedHandlerTest" data:nil responseCallback:^(id responseData) { + XCTAssertEqualObjects(responseData, @"Response from JS"); + [callbackInvocked fulfill]; + }]; +} + + - (void)testJavascriptReceiveResponseWithoutSafetyTimeout { [self classSpecificTestJavascriptReceiveResponseWithoutSafetyTimeout:_uiWebView]; [self classSpecificTestJavascriptReceiveResponseWithoutSafetyTimeout:_wkWebView]; diff --git a/Tests/WebViewJavascriptBridgeTests/echo.html b/Tests/WebViewJavascriptBridgeTests/echo.html index 4549722d..34a82eb7 100644 --- a/Tests/WebViewJavascriptBridgeTests/echo.html +++ b/Tests/WebViewJavascriptBridgeTests/echo.html @@ -27,6 +27,15 @@ } }) }) + bridge.registerHandler('jsInvokeUndefinedHandlerTest', function(data, responseCallback) { + bridge.callHandler('undefinedHandler', { foo:'bar' }, function(response) { + if (response && Object.keys(response).length == 0) { + responseCallback("Response from JS") + } else { + responseCallback("Failed") + } + }) + }) }) diff --git a/WebViewJavascriptBridge/WebViewJavascriptBridgeBase.m b/WebViewJavascriptBridge/WebViewJavascriptBridgeBase.m index 3ec26ed4..4719af80 100755 --- a/WebViewJavascriptBridge/WebViewJavascriptBridgeBase.m +++ b/WebViewJavascriptBridge/WebViewJavascriptBridgeBase.m @@ -102,6 +102,7 @@ - (void)flushMessageQueue:(NSString *)messageQueueString{ if (!handler) { NSLog(@"WVJBNoHandlerException, No handler for message from JS: %@", message); + responseCallback(@{}); continue; } From f5b2a15fa069de8cff1dab30648b287585aa31ef Mon Sep 17 00:00:00 2001 From: Justin Driscoll Date: Thu, 14 Sep 2017 15:26:43 -0400 Subject: [PATCH 2/3] Prevent handler from being called twice --- WebViewJavascriptBridge/WKWebViewJavascriptBridge.m | 1 + 1 file changed, 1 insertion(+) diff --git a/WebViewJavascriptBridge/WKWebViewJavascriptBridge.m b/WebViewJavascriptBridge/WKWebViewJavascriptBridge.m index 47667df6..73c923db 100644 --- a/WebViewJavascriptBridge/WKWebViewJavascriptBridge.m +++ b/WebViewJavascriptBridge/WKWebViewJavascriptBridge.m @@ -147,6 +147,7 @@ - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigati [_base logUnkownMessage:url]; } decisionHandler(WKNavigationActionPolicyCancel); + return; } if (strongDelegate && [strongDelegate respondsToSelector:@selector(webView:decidePolicyForNavigationAction:decisionHandler:)]) { From 818b9ef93c3c51f4f2883d30524b05d71dc64a59 Mon Sep 17 00:00:00 2001 From: Victor Ilyukevich Date: Wed, 18 Oct 2017 00:43:46 -0700 Subject: [PATCH 3/3] Fix "declaration is not a prototype" warning --- WebViewJavascriptBridge/WebViewJavascriptBridge_JS.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WebViewJavascriptBridge/WebViewJavascriptBridge_JS.h b/WebViewJavascriptBridge/WebViewJavascriptBridge_JS.h index 6cb1cb95..9c857f16 100644 --- a/WebViewJavascriptBridge/WebViewJavascriptBridge_JS.h +++ b/WebViewJavascriptBridge/WebViewJavascriptBridge_JS.h @@ -1,3 +1,3 @@ #import -NSString * WebViewJavascriptBridge_js(); \ No newline at end of file +NSString * WebViewJavascriptBridge_js(void);