What is react-native-webview?
The react-native-webview package is a powerful tool for embedding web content into a React Native application. It allows developers to render web pages, handle navigation, and interact with web content using JavaScript. This package is highly customizable and supports various features such as injecting JavaScript, handling navigation events, and more.
What are react-native-webview's main functionalities?
Basic WebView
This feature allows you to embed a basic web page within your React Native application. The WebView component takes a source prop that specifies the URL of the web page to be loaded.
import React from 'react';
import { WebView } from 'react-native-webview';
const MyWebView = () => (
<WebView
source={{ uri: 'https://www.example.com' }}
style={{ marginTop: 20 }}
/>
);
export default MyWebView;
Injecting JavaScript
This feature allows you to inject JavaScript into the web page being loaded. The injectedJavaScript prop takes a string of JavaScript code that will be executed once the page has loaded.
import React from 'react';
import { WebView } from 'react-native-webview';
const MyWebView = () => (
<WebView
source={{ uri: 'https://www.example.com' }}
injectedJavaScript={"document.body.style.backgroundColor = 'red';"}
style={{ marginTop: 20 }}
/>
);
export default MyWebView;
Handling Navigation Events
This feature allows you to handle navigation events within the WebView. The onNavigationStateChange prop takes a function that will be called whenever the navigation state changes, providing details about the navigation event.
import React from 'react';
import { WebView } from 'react-native-webview';
const MyWebView = () => (
<WebView
source={{ uri: 'https://www.example.com' }}
onNavigationStateChange={(navState) => {
console.log('Navigation state changed:', navState);
}}
style={{ marginTop: 20 }}
/>
);
export default MyWebView;
Other packages similar to react-native-webview
react-native-inappbrowser-reborn
The react-native-inappbrowser-reborn package allows you to open web content in an in-app browser. It provides a more native feel compared to a WebView and supports features like custom animations and toolbar customization. However, it is not as flexible as react-native-webview for embedding web content directly within your application.
React Native WebView - a Modern, Cross-Platform WebView for React Native
React Native WebView is a modern, well-supported, and cross-platform WebView for React Native. It is intended to be a replacement for the built-in WebView (which will be removed from core).
Core Maintainers - Sponsoring companies
This project is maintained for free by these people using both their free time and their company work time.
Platforms Supported
Note: Expo support for React Native WebView started with Expo SDK v33.0.0.
Getting Started
Read our Getting Started Guide. If any step seems unclear, please create a detailed issue.
Versioning
This project follows semantic versioning. We do not hesitate to release breaking changes but they will be in a major version.
Breaking History:
Current Version:
- 11.0.0 - Android setSupportMultipleWindows.
- 10.0.0 - Android Gradle plugin is only required when opening the project stand-alone
- 9.0.0 - props updates to injectedJavaScript are no longer immutable.
- 8.0.0 - onNavigationStateChange now triggers with hash url changes
- 7.0.1 - Removed UIWebView
- 6.0.2 - Update to AndroidX. Make sure to enable it in your project's
android/gradle.properties
. See Getting Started Guide. - 5.0.1 - Refactored the old postMessage implementation for communication from webview to native.
- 4.0.0 - Added cache (enabled by default).
- 3.0.0 - WKWebview: Add shared process pool so cookies and localStorage are shared across webviews in iOS (enabled by default).
- 2.0.0 - First release this is a replica of the core webview component
Upcoming:
- this.webView.postMessage() removal (never documented and less flexible than injectJavascript) -> how to migrate
- Kotlin rewrite
- Maybe Swift rewrite
Usage
Import the WebView
component from react-native-webview
and use it like so:
import React, { Component } from 'react';
import { StyleSheet, Text, View } from 'react-native';
import { WebView } from 'react-native-webview';
class MyWebComponent extends Component {
render() {
return <WebView source={{ uri: 'https://reactnative.dev/' }} />;
}
}
For more, read the API Reference and Guide. If you're interested in contributing, check out the Contributing Guide.
Common issues
- If you're getting
Invariant Violation: Native component for "RNCWebView does not exist"
it likely means you forgot to run react-native link
or there was some error with the linking process - If you encounter a build error during the task
:app:mergeDexRelease
, you need to enable multidex support in android/app/build.gradle
as discussed in this issue
Contributing
See Contributing.md
Contributors
Thanks goes to these wonderful people (emoji key):
This project follows the all-contributors specification. Contributions of any kind welcome!
License
MIT
Translations
This readme is available in: