Skip to content

Commit 0022354

Browse files
RSNarafacebook-github-bot
authored andcommitted
Implement 'injectJavaScript' method
Summary: @public This diff introduces a method called `injectJavaScript(script)` on the React Native `<WKWebView/>` 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
1 parent 90e85a4 commit 0022354

File tree

3 files changed

+18
-0
lines changed

3 files changed

+18
-0
lines changed

React/Views/RCTWKWebView.h

+1
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,6 @@
2424
@property (nonatomic, assign) CGFloat decelerationRate;
2525

2626
- (void)postMessage:(NSString *)message;
27+
- (void)injectJavaScript:(NSString *)script;
2728

2829
@end

React/Views/RCTWKWebView.m

+5
Original file line numberDiff line numberDiff line change
@@ -255,4 +255,9 @@ - (void) webView:(WKWebView *)webView
255255
}
256256
}
257257

258+
- (void)injectJavaScript:(NSString *)script
259+
{
260+
[self evaluateJS: script thenCall: nil];
261+
}
262+
258263
@end

React/Views/RCTWKWebViewManager.m

+12
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,16 @@ - (UIView *)view
4545
view.decelerationRate = json == nil ? UIScrollViewDecelerationRateNormal : [RCTConvert CGFloat: json];
4646
}
4747

48+
RCT_EXPORT_METHOD(injectJavaScript:(nonnull NSNumber *)reactTag script:(NSString *)script)
49+
{
50+
[self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, RCTWKWebView *> *viewRegistry) {
51+
RCTWKWebView *view = viewRegistry[reactTag];
52+
if (![view isKindOfClass:[RCTWKWebView class]]) {
53+
RCTLogError(@"Invalid view returned from registry, expecting RCTWebView, got: %@", view);
54+
} else {
55+
[view injectJavaScript:script];
56+
}
57+
}];
58+
}
59+
4860
@end

0 commit comments

Comments
 (0)