diff --git a/React/Views/RCTWKWebView.h b/React/Views/RCTWKWebView.h index c42023d0946..b0f073a67e1 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 601651657d9..4083f1a5fbd 100644 --- a/React/Views/RCTWKWebView.m +++ b/React/Views/RCTWKWebView.m @@ -255,4 +255,9 @@ static NSString *const MessageHanderName = @"ReactNative"; } } +- (void)injectJavaScript:(NSString *)script +{ + [self evaluateJS: script thenCall: nil]; +} + @end diff --git a/React/Views/RCTWKWebViewManager.m b/React/Views/RCTWKWebViewManager.m index 8c234b11536..f6e3a037181 100644 --- a/React/Views/RCTWKWebViewManager.m +++ b/React/Views/RCTWKWebViewManager.m @@ -45,4 +45,16 @@ RCT_CUSTOM_VIEW_PROPERTY(decelerationRate, CGFloat, RCTWKWebView) { 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