@capacitor/inappbrowser
The InAppBrowser Plugin provides a web browser view that allows you to load any web page externally. It behaves as a standard web browser and is useful to load untrusted content without risking your application's security. It offers three different ways to open URLs; in a WebView, in an in-app system browser (Custom Tabs for Android and SFSafariViewController for iOS), and in the device's default browser.
Install
npm install @capacitor/inappbrowser
npx cap sync
Supported Platforms
- iOS
- Android
Android
The InAppBrowser plugin requires a minimum Android SDK target of 26. This is higher than the default that comes with your Capacitor application. You can update this value in your android/variables.gradle file.
ext {
minSdkVersion = 26
}
LocalStorage Isolation
The openInWebView option provides isolation for localStorage and cookies to ensure that content loaded in the InAppBrowser does not interfere with the main application's storage.
- iOS: Storage is isolated by default.
- Android (API 28+): Storage is isolated by default by running the InAppBrowser in a separate process (
:OSInAppBrowser) with a dedicated data directory suffix. - Android (API < 28): Storage is shared with the main application due to platform limitations.
Opting-out of Isolation (Android)
If your use case requires sharing localStorage or cookies between the main app and the InAppBrowser on Android, you can opt-out of isolation by setting isIsolated: false in the android options.
Disabling isolation reduces the security of your app by allowing potentially untrusted web content to access your application's private storage (Cookies, LocalStorage, etc.). Use this only if absolutely necessary.
Breaking Change (Android): Apps upgrading to this version will lose any existing localStorage or cookies previously stored by the InAppBrowser on the first run. This is because the WebView now runs in a separate process with its own data directory. Users may need to re-authenticate with websites that relied on persisted session data.
Usage Example
Open In External Browser
import { InAppBrowser } from '@capacitor/inappbrowser';
await InAppBrowser.openInExternalBrowser({
url: "https://www.google.com"
});
Open In System Browser (Custom Tabs for Android, SFSafariViewController for iOS)
import { InAppBrowser, DefaultSystemBrowserOptions } from '@capacitor/inappbrowser';
await InAppBrowser.openInSystemBrowser({
url: "https://www.google.com",
options: DefaultSystemBrowserOptions
});
Open In Web View
import { InAppBrowser, DefaultWebViewOptions } from '@capacitor/inappbrowser';
await InAppBrowser.openInWebView({
url: "https://www.google.com",
options: DefaultWebViewOptions
});
Close (Web View or System Browser)
import { InAppBrowser } from '@capacitor/inappbrowser';
await InAppBrowser.close();
Add Listeners
import { InAppBrowser } from '@capacitor/inappbrowser';
await InAppBrowser.addListener('browserClosed', () => {
console.log("browser was closed.");
});
await InAppBrowser.addListener('browserPageNavigationCompleted', (data) => {
console.log("browser page navigation was completed. " + data.url);
});
await InAppBrowser.addListener('browserPageLoaded', () => {
console.log("browser was loaded.");
});
Remove All Listeners
import { InAppBrowser } from '@capacitor/inappbrowser';
InAppBrowser.removeAllListeners();
API
openInWebView(...)
openInWebView(model: OpenInWebViewParameterModel) => Promise<void>
Opens the web content of the given URL in your mobile app using a custom web view within your application.
| Param | Type | Description |
|---|---|---|
model | | The parameters to open the URL in the web view |
openInSystemBrowser(...)
openInSystemBrowser(model: OpenInSystemBrowserParameterModel) => Promise<void>
Opens the web content of the given URL in your mobile app, using SafariViewController for iOS and Custom Tabs for Android.
| Param | Type | Description |
|---|---|---|
model | | The parameters to open the URL in the system browser |
openInExternalBrowser(...)
openInExternalBrowser(model: OpenInDefaultParameterModel) => Promise<void>
Opens the web content of the given URL in a separate browser, outside of your mobile application.
| Param | Type | Description |
|---|---|---|
model | | The parameters to open the URL in the external browser |
close()
close() => Promise<void>
Closes the currently active browser. It can be used to close browsers launched through the openInSystemBrowser or openInWebView actions.
addListener('browserClosed' | 'browserPageLoaded', ...)
addListener(eventName: "browserClosed" | "browserPageLoaded", listenerFunc: () => void) => Promise<PluginListenerHandle>
Adds a listener for the specified browser events, with no data being returned.
| Param | Type | Description |
|---|---|---|
eventName | 'browserClosed' | 'browserPageLoaded' | The name of the browser event to listen for: 'browserClosed' or 'browserPageLoaded'. |
listenerFunc | () => void | The function to be called when the event occurs. |
Returns:
Promise<PluginListenerHandle>
addListener('browserPageNavigationCompleted', ...)
addListener(eventName: "browserPageNavigationCompleted", listenerFunc: (data: BrowserPageNavigationCompletedEventData) => void) => Promise<PluginListenerHandle>
Adds a listener for the specified browser event, which receives data.
| Param | Type | Description |
|---|---|---|
eventName | 'browserPageNavigationCompleted' | The name of the browser event to listen for: 'browserPageNavigationCompleted'. Applies only to openInWebView. |
listenerFunc | | The function to be called when the event occurs. |
Returns:
Promise<PluginListenerHandle>
removeAllListeners()
removeAllListeners() => void
Removes all listeners for the browser events.
Interfaces
OpenInWebViewParameterModel
Defines the options for opening a URL in the web view.
| Prop | Type | Description |
|---|---|---|
options | | A structure containing some configurations to apply to the Web View. |
customHeaders | { [key: string]: string; } | A map of custom headers to be sent with the request. |
WebViewOptions
| Prop | Type | Description |
|---|---|---|
showURL | boolean | Displays the URL on the Web View. |
showToolbar | boolean | Displays the toolbar on the Web View. |
clearCache | boolean | Clears the Web View's cookie cache before a new window is opened. |
clearSessionCache | boolean | Clears the session cookie cache before a new window is opened. |
mediaPlaybackRequiresUserAction | boolean | Prevents HTML5 audio or video from auto-playing. |
closeButtonText | string | Sets the text to display on the Close button on the Web View. |
toolbarPosition | | Sets the position to display the Toolbar on the Web View. |
showNavigationButtons | boolean | Displays the navigation buttons. |
leftToRight | boolean | Swaps the positions of the navigation buttons and the close button. |
customWebViewUserAgent | string | null | Sets a custom user agent to open the Web View with. If empty or not set, the parameter will be ignored. |
android | | Android-specific Web View options. |
iOS | | iOS-specific Web View options. |
AndroidWebViewOptions
| Prop | Type | Description |
|---|---|---|
allowZoom | boolean | Shows the Android browser's zoom controls. |
hardwareBack | boolean | Uses the hardware back button to navigate backwards through the Web View's history. If there is no previous page, the Web View will close. |
pauseMedia | boolean | Makes the Web View pause/resume with the app to stop background audio. |
isIsolated | boolean | Whether to run the InAppBrowser in an isolated process. Android only. Defaults to true. |
iOSWebViewOptions
| Prop | Type | Description |
|---|---|---|
allowOverScroll | boolean | Turns on the Web View bounce property. |
enableViewportScale | boolean | Prevents viewport scaling through a meta tag. |
allowInLineMediaPlayback | boolean | Allows in-line HTML5 media playback, displaying within the browser window rather than a device-specific playback interface. Note: The HTML's video element must also include the webkit-playsinline attribute. |
surpressIncrementalRendering | boolean | Waits until all new view content is received before being rendered. |
viewStyle | | Sets the presentation style of the Web View. |
animationEffect | | Sets the transition style of the Web View. |
allowsBackForwardNavigationGestures | boolean | Enables back and forward swipe gestures in the Web View. |
OpenInSystemBrowserParameterModel
Defines the options for opening a URL in the system browser.
| Prop | Type | Description |
|---|---|---|
options | | A structure containing some configurations to apply to the System Browser. |
SystemBrowserOptions
| Prop | Type | Description |
|---|---|---|
android | | Android-specific System Browser options. |
iOS | | iOS-specific System Browser options. |