From 1584108805ca6c8eff7a77e15c8553028665b53f Mon Sep 17 00:00:00 2001 From: Ramanpreet Nara Date: Thu, 16 Aug 2018 13:34:14 -0700 Subject: [PATCH] Implement 'reload' and 'stopLoading' methods Summary: @public This diff implements the `reload` and `stopLoading` methods for `WKWebView`. Their functionality is self-explanatory. Reviewed By: shergin Differential Revision: D6369292 fbshipit-source-id: ba176f4406e0a67606406f36dd66f7615f4796c3 --- React/Views/RCTWKWebView.h | 2 ++ React/Views/RCTWKWebView.m | 20 ++++++++++++++++++++ React/Views/RCTWKWebViewManager.m | 24 ++++++++++++++++++++++++ 3 files changed, 46 insertions(+) diff --git a/React/Views/RCTWKWebView.h b/React/Views/RCTWKWebView.h index ce9b0734783b0c..4e749d59c5a6c2 100644 --- a/React/Views/RCTWKWebView.h +++ b/React/Views/RCTWKWebView.h @@ -27,5 +27,7 @@ - (void)injectJavaScript:(NSString *)script; - (void)goForward; - (void)goBack; +- (void)reload; +- (void)stopLoading; @end diff --git a/React/Views/RCTWKWebView.m b/React/Views/RCTWKWebView.m index b2dbc1203864fc..b33dffefea98a9 100644 --- a/React/Views/RCTWKWebView.m +++ b/React/Views/RCTWKWebView.m @@ -270,4 +270,24 @@ - (void)goBack [_webView goBack]; } +- (void)reload +{ + /** + * When the initial load fails due to network connectivity issues, + * [_webView reload] doesn't reload the webpage. Therefore, we must + * manually call [_webView loadRequest:request]. + */ + NSURLRequest *request = [RCTConvert NSURLRequest:self.source]; + if (request.URL && !_webView.URL.absoluteString.length) { + [_webView loadRequest:request]; + } + else { + [_webView reload]; + } +} + +- (void)stopLoading +{ + [_webView stopLoading]; +} @end diff --git a/React/Views/RCTWKWebViewManager.m b/React/Views/RCTWKWebViewManager.m index 0fee19310997d3..918bc736a03803 100644 --- a/React/Views/RCTWKWebViewManager.m +++ b/React/Views/RCTWKWebViewManager.m @@ -81,4 +81,28 @@ - (UIView *)view }]; } +RCT_EXPORT_METHOD(reload:(nonnull NSNumber *)reactTag) +{ + [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary *viewRegistry) { + RCTWKWebView *view = viewRegistry[reactTag]; + if (![view isKindOfClass:[RCTWKWebView class]]) { + RCTLogError(@"Invalid view returned from registry, expecting RCTWebView, got: %@", view); + } else { + [view reload]; + } + }]; +} + +RCT_EXPORT_METHOD(stopLoading:(nonnull NSNumber *)reactTag) +{ + [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary *viewRegistry) { + RCTWKWebView *view = viewRegistry[reactTag]; + if (![view isKindOfClass:[RCTWKWebView class]]) { + RCTLogError(@"Invalid view returned from registry, expecting RCTWebView, got: %@", view); + } else { + [view stopLoading]; + } + }]; +} + @end