Démarrage
-
Installer le package
Fenêtre de terminal npm i @capgo/inappbrowserFenêtre de terminal pnpm add @capgo/inappbrowserFenêtre de terminal yarn add @capgo/inappbrowserFenêtre de terminal bun add @capgo/inappbrowser -
Synchroniser avec les projets natifs
Fenêtre de terminal npx cap syncFenêtre de terminal pnpm cap syncFenêtre de terminal yarn cap syncFenêtre de terminal bunx cap sync
Utilisation
Section titled “Utilisation”Importez le plugin et utilisez ses deux principaux points d’entrée :
import { InAppBrowser, ToolBarType, BackgroundColor } from '@capgo/inappbrowser';
// 1) Simple custom tab / SFSafariViewControllerconst openExternal = async () => { await InAppBrowser.open({ url: 'https://capgo.app', isPresentAfterPageLoad: true, preventDeeplink: false, });};
// 2) Full WebView with navigation, headers, share, messaging, etc.const openWebView = async () => { await InAppBrowser.openWebView({ url: 'https://capgo.app', title: 'Capgo', toolbarType: ToolBarType.NAVIGATION, backgroundColor: BackgroundColor.BLACK, activeNativeNavigationForWebview: true, showReloadButton: true, shareSubject: 'Check this page', shareDisclaimer: { title: 'Disclaimer', message: 'You are about to share content', confirmBtn: 'Continue', cancelBtn: 'Cancel', }, });};
// Messaging between app and the opened WebViewconst setupListeners = async () => { await InAppBrowser.addListener('urlChangeEvent', (event) => { console.log('URL changed to:', event.url); });
await InAppBrowser.addListener('messageFromWebview', (event) => { console.log('Message from web:', event.detail); });
await InAppBrowser.addListener('closeEvent', () => { console.log('WebView closed'); });};
// Send data to the WebViewconst sendData = async () => { await InAppBrowser.postMessage({ detail: { action: 'refresh-profile' } });};
// Close and reload helpersconst closeBrowser = () => InAppBrowser.close();const reloadPage = () => InAppBrowser.reload();Référence API
Section titled “Référence API”open(options: OpenOptions)
Section titled “open(options: OpenOptions)”Ouvre une URL dans un onglet personnalisé / SFSafariViewController.
interface OpenOptions { /** Target URL to load */ url: string; /** Present after the page finishes loading */ isPresentAfterPageLoad?: boolean; /** Prevent deep links from opening external apps */ preventDeeplink?: boolean;}
await InAppBrowser.open({ url: 'https://example.com', preventDeeplink: true });openWebView(options: OpenWebViewOptions)
Section titled “openWebView(options: OpenWebViewOptions)”Charge un WebView complet avec interface de navigation, en-têtes, identifiants, script et messagerie.
interface OpenWebViewOptions { url: string; headers?: Record<string, string>; credentials?: { username: string; password: string }; materialPicker?: boolean; shareDisclaimer?: { title: string; message: string; confirmBtn: string; cancelBtn: string; }; toolbarType?: ToolBarType; shareSubject?: string; title?: string; backgroundColor?: BackgroundColor; activeNativeNavigationForWebview?: boolean; disableGoBackOnNativeApplication?: boolean; isPresentAfterPageLoad?: boolean; isInspectable?: boolean; isAnimated?: boolean; showReloadButton?: boolean; closeModal?: boolean; closeModalTitle?: string; closeModalDescription?: string; closeModalOk?: string; closeModalCancel?: string; visibleTitle?: boolean; toolbarColor?: string; toolbarTextColor?: string; showArrow?: boolean; ignoreUntrustedSSLError?: boolean; preShowScript?: string; preShowScriptInjectionTime?: 'documentStart' | 'pageLoad'; proxyRequests?: string; buttonNearDone?: { ios: { iconType: 'sf-symbol' | 'asset'; icon: string }; android: { iconType: 'asset' | 'vector'; icon: string; width?: number; height?: number }; }; textZoom?: number; preventDeeplink?: boolean; authorizedAppLinks?: string[]; enabledSafeBottomMargin?: boolean; useTopInset?: boolean; enableGooglePaySupport?: boolean; blockedHosts?: string[]; width?: number; height?: number; x?: number; y?: number;}
await InAppBrowser.openWebView({ url: 'https://new-page.com', toolbarType: ToolBarType.NAVIGATION, showReloadButton: true,});Valeurs ToolBarType : activity (fermer + partager), compact (fermer seulement), navigation (arrière/avant + fermer), blank (pas de barre d’outils). Valeurs BackgroundColor : white ou black.
close(options?)
Section titled “close(options?)”Ferme le WebView/onglet personnalisé.
Options:
isAnimated?: boolean- Si l’action de fermeture doit être animée
reload()
Section titled “reload()”Recharge la page WebView actuelle.
goBack()
Section titled “goBack()”Revient en arrière dans l’historique WebView et retourne { canGoBack: boolean }.
setUrl({ url: string })
Section titled “setUrl({ url: string })”Remplace l’URL WebView actuelle.
executeScript({ code: string })
Section titled “executeScript({ code: string })”Injecte du JavaScript dans le WebView.
postMessage({ detail: Record<string, any> })
Section titled “postMessage({ detail: Record<string, any> })”Envoie des données de l’application native vers le WebView (réception en JS via window.addEventListener('messageFromNative', ...)).
getCookies({ url, includeHttpOnly? })
Section titled “getCookies({ url, includeHttpOnly? })”Retourne les cookies pour l’URL.
clearCookies({ url }) / clearAllCookies() / clearCache()
Section titled “clearCookies({ url }) / clearAllCookies() / clearCache()”Assistants de gestion des cookies et du cache.
updateDimensions(options: DimensionOptions)
Section titled “updateDimensions(options: DimensionOptions)”Modifie la taille/position du WebView à l’exécution (width, height, x, y).
removeAllListeners()
Section titled “removeAllListeners()”Désinscrit tous les écouteurs du plugin.
Événements
Section titled “Événements”urlChangeEvent
Section titled “urlChangeEvent”Déclenché lorsque l’URL change dans le navigateur.
interface UrlChangeEvent { url: string;}
InAppBrowser.addListener('urlChangeEvent', (event) => { console.log('New URL:', event.url);});messageFromWebview
Section titled “messageFromWebview”Déclenché lorsque window.mobileApp.postMessage(...) est appelé dans le WebView.
InAppBrowser.addListener('messageFromWebview', (event) => { console.log('Payload from web:', event.detail);});closeEvent
Section titled “closeEvent”Déclenché lorsque le navigateur est fermé.
InAppBrowser.addListener('closeEvent', () => { console.log('Browser closed');});buttonNearDoneClick
Section titled “buttonNearDoneClick”Déclenché lorsque le bouton personnalisé ajouté avec buttonNearDone est pressé.
InAppBrowser.addListener('buttonNearDoneClick', (event) => { console.log('Button near done tapped', event);});confirmBtnClicked
Section titled “confirmBtnClicked”Déclenché lorsqu’une boîte de dialogue de confirmation (avertissement ou modal de fermeture) est acceptée.
InAppBrowser.addListener('confirmBtnClicked', (event) => { console.log('Confirm accepted, current URL:', event.url);});browserPageLoaded / pageLoadError
Section titled “browserPageLoaded / pageLoadError”Événements de cycle de vie pour le succès ou l’échec du chargement du WebView.
InAppBrowser.addListener('browserPageLoaded', () => console.log('Page loaded'));InAppBrowser.addListener('pageLoadError', () => console.log('Page failed to load'));Utilisation avancée
Section titled “Utilisation avancée”Implémentation du flux OAuth
Section titled “Implémentation du flux OAuth”import { InAppBrowser } from '@capgo/inappbrowser';
export class OAuthService { private listeners: any[] = [];
async authenticate(authUrl: string, redirectUri: string) { return new Promise<string>((resolve, reject) => { // Listen for URL changes const urlListener = InAppBrowser.addListener('urlChangeEvent', (event) => { if (event.url.startsWith(redirectUri)) { // Extract OAuth code/token from URL const url = new URL(event.url); const code = url.searchParams.get('code');
if (code) { InAppBrowser.close(); resolve(code); } else { const error = url.searchParams.get('error'); reject(new Error(error || 'OAuth failed')); } } });
this.listeners.push(urlListener);
// Open OAuth provider InAppBrowser.open({ url: authUrl, preventDeeplink: true, }); }); }
cleanup() { this.listeners.forEach(listener => listener.remove()); this.listeners = []; }}Interface de navigateur personnalisée
Section titled “Interface de navigateur personnalisée”const openCustomBrowser = async () => { await InAppBrowser.open({ url: 'https://example.com', isPresentAfterPageLoad: true, preventDeeplink: false, });};Gestion des liens externes
Section titled “Gestion des liens externes”import { InAppBrowser } from '@capgo/inappbrowser';
export class LinkHandler { async openExternalLink(url: string) { // Check if URL should open in browser if (this.shouldOpenInBrowser(url)) { await InAppBrowser.open({ url, preventDeeplink: true, }); } else { // Handle internally window.location.href = url; } }
private shouldOpenInBrowser(url: string): boolean { // External domains const externalDomains = ['youtube.com', 'twitter.com', 'facebook.com']; const urlDomain = new URL(url).hostname;
return externalDomains.some(domain => urlDomain.includes(domain)); }}Bonnes pratiques
Section titled “Bonnes pratiques”-
Supprimez toujours les écouteurs
const listener = await InAppBrowser.addListener('urlChangeEvent', handler);// When donelistener.remove(); -
Gérez les états du navigateur
let browserOpen = false;const launch = async () => {browserOpen = true;await InAppBrowser.openWebView({ url: 'https://example.com' });};InAppBrowser.addListener('closeEvent', () => {browserOpen = false;}); -
Validez les URL avant d’ouvrir
const isValidUrl = (url: string): boolean => {try {new URL(url);return true;} catch {return false;}};if (isValidUrl(url)) {await InAppBrowser.open({ url });} -
Personnalisez pour la plateforme
import { Capacitor } from '@capacitor/core';const options = {url: 'https://example.com',preventDeeplink: Capacitor.getPlatform() === 'ios',};
Notes de plateforme
Section titled “Notes de plateforme”- Utilise
SFSafariViewController - Prend en charge iOS 11.0+
- Respecte les insets de la zone sûre
- Prend en charge les styles de présentation personnalisés
Android
Section titled “Android”- Utilise Chrome Custom Tabs
- Se replie sur WebView si Chrome n’est pas disponible
- Prend en charge Android 5.0 (API 21)+
- Personnalisation de la barre d’outils prise en charge via
toolbarType,toolbarColor,buttonNearDone, etc.
- Ouvre dans un nouvel onglet/fenêtre de navigateur
- Options de personnalisation limitées
- Pas d’événements de changement d’URL