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/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:)]) { 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; } 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);