From 1b73e76ff374e45ee92f4866f963afff4978277e Mon Sep 17 00:00:00 2001 From: Ramanpreet Nara Date: Thu, 16 Aug 2018 13:34:11 -0700 Subject: [PATCH] Implement 'goForward' and 'goBack' methods Summary: @public This diff implements the `goForward` and `goBack` methods on `WKWebView`. 1. `goForward` moves the web view one screen forward in the browser history. 1. `goBack` moves the web view one screen back in the browser history. Reviewed By: shergin Differential Revision: D6367495 fbshipit-source-id: e100ca00e92a6eaa30d2af1af642ba79a9c9feae --- React/Views/RCTWKWebView.h | 2 ++ React/Views/RCTWKWebView.m | 10 ++++++++++ React/Views/RCTWKWebViewManager.m | 24 ++++++++++++++++++++++++ 3 files changed, 36 insertions(+) diff --git a/React/Views/RCTWKWebView.h b/React/Views/RCTWKWebView.h index b0f073a67e1..ce9b0734783 100644 --- a/React/Views/RCTWKWebView.h +++ b/React/Views/RCTWKWebView.h @@ -25,5 +25,7 @@ - (void)postMessage:(NSString *)message; - (void)injectJavaScript:(NSString *)script; +- (void)goForward; +- (void)goBack; @end diff --git a/React/Views/RCTWKWebView.m b/React/Views/RCTWKWebView.m index 4083f1a5fbd..b2dbc120386 100644 --- a/React/Views/RCTWKWebView.m +++ b/React/Views/RCTWKWebView.m @@ -260,4 +260,14 @@ static NSString *const MessageHanderName = @"ReactNative"; [self evaluateJS: script thenCall: nil]; } +- (void)goForward +{ + [_webView goForward]; +} + +- (void)goBack +{ + [_webView goBack]; +} + @end diff --git a/React/Views/RCTWKWebViewManager.m b/React/Views/RCTWKWebViewManager.m index f6e3a037181..0fee1931099 100644 --- a/React/Views/RCTWKWebViewManager.m +++ b/React/Views/RCTWKWebViewManager.m @@ -57,4 +57,28 @@ RCT_EXPORT_METHOD(injectJavaScript:(nonnull NSNumber *)reactTag script:(NSString }]; } +RCT_EXPORT_METHOD(goBack:(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 goBack]; + } + }]; +} + +RCT_EXPORT_METHOD(goForward:(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 goForward]; + } + }]; +} + @end