This commit is contained in:
Thibault Malbranche 2019-02-06 14:53:28 +01:00
commit e624067a1c
4 changed files with 37 additions and 26 deletions

View File

@ -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

View File

@ -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)],
); );
} }

View File

@ -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.

View File

@ -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": {