From 1984f4bc2709f80065bb416b984684a2955b1467 Mon Sep 17 00:00:00 2001 From: Ramanpreet Nara Date: Thu, 16 Aug 2018 13:34:09 -0700 Subject: [PATCH] Implement 'injectJavaScript' method Summary: @public This diff introduces a method called `injectJavaScript(script)` on the React Native `` component. When called with a string, it evaluates that string as JavaScript within the web view. Reviewed By: shergin Differential Revision: D6367445 fbshipit-source-id: f68afeff42535dc991747f96a63f3c956faf13d3 --- React/Views/RCTWKWebView.h | 1 + React/Views/RCTWKWebView.m | 5 +++++ React/Views/RCTWKWebViewManager.m | 12 ++++++++++++ 3 files changed, 18 insertions(+) diff --git a/React/Views/RCTWKWebView.h b/React/Views/RCTWKWebView.h index c42023d09460c2..b0f073a67e10da 100644 --- a/React/Views/RCTWKWebView.h +++ b/React/Views/RCTWKWebView.h @@ -24,5 +24,6 @@ @property (nonatomic, assign) CGFloat decelerationRate; - (void)postMessage:(NSString *)message; +- (void)injectJavaScript:(NSString *)script; @end diff --git a/React/Views/RCTWKWebView.m b/React/Views/RCTWKWebView.m index 601651657d93f5..4083f1a5fbdc98 100644 --- a/React/Views/RCTWKWebView.m +++ b/React/Views/RCTWKWebView.m @@ -255,4 +255,9 @@ - (void) webView:(WKWebView *)webView } } +- (void)injectJavaScript:(NSString *)script +{ + [self evaluateJS: script thenCall: nil]; +} + @end diff --git a/React/Views/RCTWKWebViewManager.m b/React/Views/RCTWKWebViewManager.m index 8c234b11536019..f6e3a037181d62 100644 --- a/React/Views/RCTWKWebViewManager.m +++ b/React/Views/RCTWKWebViewManager.m @@ -45,4 +45,16 @@ - (UIView *)view view.decelerationRate = json == nil ? UIScrollViewDecelerationRateNormal : [RCTConvert CGFloat: json]; } +RCT_EXPORT_METHOD(injectJavaScript:(nonnull NSNumber *)reactTag script:(NSString *)script) +{ + [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 injectJavaScript:script]; + } + }]; +} + @end