mirror of
https://github.com/status-im/react-native-webview.git
synced 2026-08-31 11:41:08 +00:00
fix(WKWebview): Surface evaluateJavaScript errors (#179)
In the current code using `startInLoadingState` and `injectedJavaScript` will result in an infinite loading state if `injectedJavaScript` fails to evaluate for some reason. This adds a red box error explaining there was a failure to evaluate javascript. In my case this was do to the JS string not returning a valid type so I've added a that as a potential solution in the error message and added some documentation to the API Reference with some additional warnings. To reproduce the existing behavior setup a webview with `startInLoadingState` and `injectedJavaScript` that returns an invalid type (in my case it returned a function). You should see an infinite loading state as `onLoadEnd` is never called. Try the same with this branch and you'll get a nice red box error suggesting one potential solution to the problem. 
This commit is contained in:
committed by
Thibault Malbranche
parent
6eaca5f005
commit
ec469cf00d
+1
-1
@@ -102,7 +102,7 @@ Controls whether to adjust the content inset for web views that are placed behin
|
||||
|
||||
### `injectedJavaScript`
|
||||
|
||||
Set this to provide JavaScript that will be injected into the web page when the view loads.
|
||||
Set this to provide JavaScript that will be injected into the web page when the view loads. Make sure the string evaluates to a valid type (`true` works) and doesn't otherwise throw an exception.
|
||||
|
||||
| Type | Required |
|
||||
| ------ | -------- |
|
||||
|
||||
+6
-2
@@ -512,8 +512,12 @@ static NSString *const MessageHanderName = @"ReactNative";
|
||||
thenCall: (void (^)(NSString*)) callback
|
||||
{
|
||||
[self.webView evaluateJavaScript: js completionHandler: ^(id result, NSError *error) {
|
||||
if (error == nil && callback != nil) {
|
||||
callback([NSString stringWithFormat:@"%@", result]);
|
||||
if (error == nil) {
|
||||
if (callback != nil) {
|
||||
callback([NSString stringWithFormat:@"%@", result]);
|
||||
}
|
||||
} else {
|
||||
RCTLogError(@"Error evaluating injectedJavaScript: This is possibly due to an unsupported return type. Try adding true to the end of your injectedJavaScript string.");
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user