Merge branch 'master' of https://github.com/react-native-community/react-native-webview into pr/296
This commit is contained in:
commit
e624067a1c
13
README.md
13
README.md
|
@ -11,7 +11,6 @@ _Garrett McCullough, mobile engineer at Virta Health_
|
||||||
|
|
||||||
- [x] iOS (both UIWebView and WKWebView)
|
- [x] iOS (both UIWebView and WKWebView)
|
||||||
- [x] Android
|
- [x] Android
|
||||||
- [ ] Windows 10 (coming soon)
|
|
||||||
|
|
||||||
_Note: React Native WebView is not currently supported by Expo unless you "eject"._
|
_Note: React Native WebView is not currently supported by Expo unless you "eject"._
|
||||||
|
|
||||||
|
@ -44,7 +43,6 @@ class MyWebComponent extends Component {
|
||||||
<WebView
|
<WebView
|
||||||
source={{ uri: "https://infinite.red/react-native" }}
|
source={{ uri: "https://infinite.red/react-native" }}
|
||||||
style={{ marginTop: 20 }}
|
style={{ marginTop: 20 }}
|
||||||
onLoadProgress={e => console.log(e.nativeEvent.progress)}
|
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -61,16 +59,9 @@ Simply install React Native WebView and then use it in place of the core WebView
|
||||||
|
|
||||||
- If you're getting `Invariant Violation: Native component for "RNCWKWebView does not exist"` it likely means you forgot to run `react-native link` or there was some error with the linking process
|
- If you're getting `Invariant Violation: Native component for "RNCWKWebView does not exist"` it likely means you forgot to run `react-native link` or there was some error with the linking process
|
||||||
|
|
||||||
### Contributor Notes
|
## Contributing
|
||||||
|
|
||||||
- I've removed all PropTypes for now. Instead, we'll be using Flow types. TypeScript types will be added at a later date.
|
See [Contributing.md](https://github.com/react-native-community/react-native-webview/blob/master/docs/Contributing.md)
|
||||||
- UIWebView is not tested fully and you will encounter some yellow warning boxes. Since it is deprecated, we don't intend to put a lot of time into supporting it, but feel free to submit PRs if you have a special use case. Note that you will need to specify `useWebKit={false}` to use UIWebView
|
|
||||||
- After pulling this repo and installing all dependencies, you can run flow on iOS and Android-specific files using the commands:
|
|
||||||
- `yarn test:ios:flow` for iOS
|
|
||||||
- `yarn test:android:flow` for Android
|
|
||||||
- If you want to add another React Native platform to this repository, you will need to create another `.flowconfig` for it. If your platform is `example`, copy the main flowconfig and rename it to `.flowconfig.example`. Then edit the config to ignore other platforms, and add `.*/*[.]example.js` to the ignore lists of the other platforms. Then add an entry to `package.json` like this:
|
|
||||||
- `"test:example:flow": "flow check --flowconfig-name .flowconfig.example"`
|
|
||||||
- Currently you need to install React Native 0.57 to be able to test these types - `flow check` will not pass against 0.56.
|
|
||||||
|
|
||||||
## Maintainers
|
## Maintainers
|
||||||
|
|
||||||
|
|
|
@ -194,10 +194,19 @@ class WebView extends React.Component<WebViewSharedProps, State> {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getViewManagerConfig = (viewManagerName: string) => {
|
||||||
|
if (!UIManager.getViewManagerConfig) {
|
||||||
|
return UIManager[viewManagerName];
|
||||||
|
}
|
||||||
|
return UIManager.getViewManagerConfig(viewManagerName);
|
||||||
|
};
|
||||||
|
|
||||||
|
getCommands = () => this.getViewManagerConfig('RNCWebView').Commands;
|
||||||
|
|
||||||
goForward = () => {
|
goForward = () => {
|
||||||
UIManager.dispatchViewManagerCommand(
|
UIManager.dispatchViewManagerCommand(
|
||||||
this.getWebViewHandle(),
|
this.getWebViewHandle(),
|
||||||
UIManager.RNCWebView.Commands.goForward,
|
this.getCommands().goForward,
|
||||||
null,
|
null,
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -205,7 +214,7 @@ class WebView extends React.Component<WebViewSharedProps, State> {
|
||||||
goBack = () => {
|
goBack = () => {
|
||||||
UIManager.dispatchViewManagerCommand(
|
UIManager.dispatchViewManagerCommand(
|
||||||
this.getWebViewHandle(),
|
this.getWebViewHandle(),
|
||||||
UIManager.RNCWebView.Commands.goBack,
|
this.getCommands().goBack,
|
||||||
null,
|
null,
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -216,7 +225,7 @@ class WebView extends React.Component<WebViewSharedProps, State> {
|
||||||
});
|
});
|
||||||
UIManager.dispatchViewManagerCommand(
|
UIManager.dispatchViewManagerCommand(
|
||||||
this.getWebViewHandle(),
|
this.getWebViewHandle(),
|
||||||
UIManager.RNCWebView.Commands.reload,
|
this.getCommands().reload,
|
||||||
null,
|
null,
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -224,7 +233,7 @@ class WebView extends React.Component<WebViewSharedProps, State> {
|
||||||
stopLoading = () => {
|
stopLoading = () => {
|
||||||
UIManager.dispatchViewManagerCommand(
|
UIManager.dispatchViewManagerCommand(
|
||||||
this.getWebViewHandle(),
|
this.getWebViewHandle(),
|
||||||
UIManager.RNCWebView.Commands.stopLoading,
|
this.getCommands().stopLoading,
|
||||||
null,
|
null,
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -232,7 +241,7 @@ class WebView extends React.Component<WebViewSharedProps, State> {
|
||||||
postMessage = (data: string) => {
|
postMessage = (data: string) => {
|
||||||
UIManager.dispatchViewManagerCommand(
|
UIManager.dispatchViewManagerCommand(
|
||||||
this.getWebViewHandle(),
|
this.getWebViewHandle(),
|
||||||
UIManager.RNCWebView.Commands.postMessage,
|
this.getCommands().postMessage,
|
||||||
[String(data)],
|
[String(data)],
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -246,7 +255,7 @@ class WebView extends React.Component<WebViewSharedProps, State> {
|
||||||
injectJavaScript = (data: string) => {
|
injectJavaScript = (data: string) => {
|
||||||
UIManager.dispatchViewManagerCommand(
|
UIManager.dispatchViewManagerCommand(
|
||||||
this.getWebViewHandle(),
|
this.getWebViewHandle(),
|
||||||
UIManager.RNCWebView.Commands.injectJavaScript,
|
this.getCommands().injectJavaScript,
|
||||||
[data],
|
[data],
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -311,7 +320,7 @@ class WebView extends React.Component<WebViewSharedProps, State> {
|
||||||
if (shouldStart) {
|
if (shouldStart) {
|
||||||
UIManager.dispatchViewManagerCommand(
|
UIManager.dispatchViewManagerCommand(
|
||||||
this.getWebViewHandle(),
|
this.getWebViewHandle(),
|
||||||
UIManager.RNCWebView.Commands.loadUrl,
|
this.getCommands().loadUrl,
|
||||||
[String(url)],
|
[String(url)],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,7 @@ import type {
|
||||||
} from './WebViewTypes';
|
} from './WebViewTypes';
|
||||||
|
|
||||||
const resolveAssetSource = Image.resolveAssetSource;
|
const resolveAssetSource = Image.resolveAssetSource;
|
||||||
|
let didWarnAboutUIWebViewUsage = false;
|
||||||
// Imported from https://github.com/facebook/react-native/blob/master/Libraries/Components/ScrollView/processDecelerationRate.js
|
// Imported from https://github.com/facebook/react-native/blob/master/Libraries/Components/ScrollView/processDecelerationRate.js
|
||||||
function processDecelerationRate(decelerationRate) {
|
function processDecelerationRate(decelerationRate) {
|
||||||
if (decelerationRate === 'normal') {
|
if (decelerationRate === 'normal') {
|
||||||
|
@ -153,6 +153,13 @@ class WebView extends React.Component<WebViewSharedProps, State> {
|
||||||
webViewRef = React.createRef();
|
webViewRef = React.createRef();
|
||||||
|
|
||||||
UNSAFE_componentWillMount() {
|
UNSAFE_componentWillMount() {
|
||||||
|
if (!this.props.useWebKit && !didWarnAboutUIWebViewUsage) {
|
||||||
|
didWarnAboutUIWebViewUsage = true;
|
||||||
|
console.warn(
|
||||||
|
'UIWebView is deprecated and will be removed soon, please use WKWebView (do not override useWebkit={true} prop),' +
|
||||||
|
' more infos here: https://github.com/react-native-community/react-native-webview/issues/312',
|
||||||
|
);
|
||||||
|
}
|
||||||
if (
|
if (
|
||||||
this.props.useWebKit === true &&
|
this.props.useWebKit === true &&
|
||||||
this.props.scalesPageToFit !== undefined
|
this.props.scalesPageToFit !== undefined
|
||||||
|
@ -289,13 +296,17 @@ class WebView extends React.Component<WebViewSharedProps, State> {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
_getCommands() {
|
_getViewManagerConfig = (viewManagerName: string) => {
|
||||||
if (!this.props.useWebKit) {
|
if (!UIManager.getViewManagerConfig) {
|
||||||
return UIManager.RNCUIWebView.Commands;
|
return UIManager[viewManagerName];
|
||||||
}
|
}
|
||||||
|
return UIManager.getViewManagerConfig(viewManagerName);
|
||||||
|
};
|
||||||
|
|
||||||
return UIManager.RNCWKWebView.Commands;
|
_getCommands = () =>
|
||||||
}
|
!this.props.useWebKit
|
||||||
|
? this._getViewManagerConfig('RNCUIWebView').Commands
|
||||||
|
: this._getViewManagerConfig('RNCWKWebView').Commands;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Go forward one page in the web view's history.
|
* Go forward one page in the web view's history.
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
"Thibault Malbranche <malbranche.thibault@gmail.com>"
|
"Thibault Malbranche <malbranche.thibault@gmail.com>"
|
||||||
],
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"version": "5.0.2",
|
"version": "5.0.5",
|
||||||
"homepage": "https://github.com/react-native-community/react-native-webview#readme",
|
"homepage": "https://github.com/react-native-community/react-native-webview#readme",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test:js": "jest",
|
"test:js": "jest",
|
||||||
|
@ -37,7 +37,7 @@
|
||||||
"flow-bin": "^0.80.0",
|
"flow-bin": "^0.80.0",
|
||||||
"jest": "^24.0.0",
|
"jest": "^24.0.0",
|
||||||
"metro-react-native-babel-preset": "^0.51.1",
|
"metro-react-native-babel-preset": "^0.51.1",
|
||||||
"react-native": "^0.57",
|
"react-native": ">=0.57 <0.59",
|
||||||
"semantic-release": "15.10.3"
|
"semantic-release": "15.10.3"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
Loading…
Reference in New Issue