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