Balise <webview>
Avertissement
La balise webview
d'Electron est basée sur la webview de Chromium
, qui subit des changements architecturaux spectaculaires. Cela affecte la stabilité des webviews
, y compris le rendu, la navigation et le routage des événements. We currently recommend to not use the webview
tag and to consider alternatives, like iframe
, a WebContentsView
, or an architecture that avoids embedded content altogether.
Activation
Par défaut, la balise webview
est désactivée dans Electron >= 5. Vous devez activer la balise en définissant l'option webviewTag
des webPréferenceslors de l'instanciation de votre BrowserWindow
. Pour plus d'information voir la doc pour : BrowserWindow constructor .
Vue d'ensemble
Affiche un contenu web externe dans une frame et un processus isolés.
Processus : Rendu
Cette classe n'est pas exportée depuis le module 'electron'
. Elle n'est disponible qu'en tant que valeur de retour des autres méthodes dans l'API Electron.
Utilisez la balise webview
pour intégrer du contenu 'hébergé' (comme des pages web) dans votre application Electron. Le contenu hébergé est inclus dans le conteneur webview
. Une page intégrée dans votre application gère la façon dont le contenu est mis en page et affiché.
Contrairement à uneiframe
, la webview
s'exécute dans un processus séparé de votre application . Il n'a pas les mêmes permissions que votre page web et toutes les interactions entre votre application et le contenu intégré seront asynchrones. Cela protège votre application du contenu incorporé. Note: La plupart des méthodes appelées sur la webview à partir de la page hôte nécessitent un appel synchrone au processus principal.
Exemple
Pour intégrer une page web dans votre application, ajoutez la balise webview
à la page de votre application qui va l'intégrer (c'est la page de l'application qui affichera le contenu de cette page). Dans sa forme la plus simple la balise webview
inclut la src
de la page web et les styles css qui contrôlent l'apparence du conteneur webview
:
<webview id="foo" src="https://www.github.com/" style="display:inline-flex; width:640px; height:480px"></webview>
Si vous voulez contrôler de quelque manière que ce soit le contenu hébergé , vous pouvez écrire du JavaScript qui écoute les événements webview
et répond à ces événements en utilisant les méthodes de la webview
. Voici un exemple de code avec deux écouteurs d'événements : un qui écoute quand la page web commence à télécharger, l'autre quand la page web arrête le chargement, et affiche un message "loading..." pendant le temps de chargement :
<script>
onload = () => {
const webview = document.querySelector('webview')
const indicator = document.querySelector('.indicator')
const loadstart = () => {
indicator.innerText = 'loading...'
}
const loadstop = () => {
indicator.innerText = ''
}
webview.addEventListener('did-start-loading', loadstart)
webview.addEventListener('did-stop-loading', loadstop)
}
</script>
Implémentation interne
Dans les détails webview
est implémentée avec des iframes hors processus (OOPIF). La balise webview
est essentiellement un élément personnalisé utilisant un DOM fantôme pour encapsuler un élément iframe
.
Donc, le comportement d'une webview
est très similaire à une iframe
cross-domain, comme dans ces exemples :
- Lorsque vous cliquez sur une
webview
, le focus de la page passe de la frame qui la contient à cettewebview
. - Vous ne pouvez pas ajouter d’écouteurs d’événements de clavier, de souris ou de défilement à une
webview
. - Toutes les réactions entre la frame qui l'intègre et cette
webview
sont asynchrones.
Note de style CSS
Veuillez noter que le style de la balise webview
utilise en interne display:flex;
afin de s’assurer que l’élément iframe
enfant remplit toute la hauteur et la largeur de sa webview
lors de l'utilisation avec des dispositions traditionnelles et flexbox. Veuillez ne pas écraser la propriété CSS par défaut display:flex;
, sauf si vous specifiez display:inline-flex;
pour la disposition en ligne.
Les Attributs de la balise Webview
La balise webview
possède les attributs suivants :
src
<webview src="https://www.github.com/"></webview>
Un string
représentant l'URL visible. L’écriture dans cet attribut lance la navigation de niveau supérieur.
En affectant sa propre valeur l'attribut src
on rechargera la page actuelle.
L'attribut src
peut également accepter des URL de données, telles que data:text/plain,Hello, world !
.
nodeintegration
<webview src="https://www.google.com/" nodeintegration></webview>
Type: boolean
. Lorsque cet attribut est présent, la page hébergée dans la webview
pourra utiliser les API de node. js telles que require
ou process
pour accéder à des ressources système de bas niveau. L'iintegration de node. js est désactivée par défaut dans la page hébergée.
nodeintegrationinsubframes
<webview src="https://www.google.com/" nodeintegrationinsubframes></webview>
Un boolean
pour l'option expérimentale qui peut activer le support de NodeJS dans les sous-frames telles que les iframes à l'intérieur de webview
. Toutes vos préchargement seront chargés pour chaque iframe, vous pouvez utiliser process.isMainFrame
pour déterminer si vous êtes ou non dans la frame principale. Cette option est désactivée par défaut dans la page hébergée.
plugins
<webview src="https://www.github.com/" plugins></webview>
Type: boolean
. Lorsque cet attribut est présent, la page hébergée par la webview
sera en mesure d'utiliser les plugins du navigateur. Les plugins sont désactivés par défaut.
preload
<!-- à partir d'un fichier -->
<webview src="https://www.github.com/" preload="./test.js"></webview>
<! - ou si vous voulez à partir d'une archive asar -->
<webview src="https://www.github.com/" preload="./app.asar/test.js"></webview>
String
Spécifie un script qui sera chargé avant les autres scripts exécutés dans la page hébergée. Le protocole de l'URL du script doit être file:
(même en utilisant des archives asar:
) car il sera chargé, sous le capot, par require
de Node qui traite les archives asar:
comme des répertoires virtuels.
Lorsque la page hébergée n'a pas l'intégration de node d'activée, ce script aura toujours l'accès à toutes les API de Node, mais les objets globaux injectés par Node seront supprimés après l'exécution de ce script.
httpreferrer
<webview src="https://www.github.com/" httpreferrer="https://example.com/"></webview>
Un string
qui définit l'URL du referrer pour la page hébergée.
useragent
<webview src="https://www.github.com/" useragent="Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko"></webview>
Une string
qui définit l'agent utilisateur de la page hébergée avant que la page ne soit parcourue. Une fois la page chargée, vous devrez utiliser la méthode setUserAgent
pour changer l'agent utilisateur.
disablewebsecurity
<webview src="https://www.github.com/" disablewebsecurity></webview>
Type: boolean
. Quand cet attribut est présent, la page hébergée aura la sécurité web désactivée. La sécurité Web est activée par défaut.
Cette valeur ne peut être modifiée qu'avant la première navigation.
partition
<webview src="https://github.com" partition="persist:github"></webview>
<webview src="https://electronjs.org" partition="electron"></webview>
string
qui définit la session utilisée par la page. Si partition
commence par persist:
, la page utilisera une session persistante disponible pour toutes les pages de l'application avec le même partition
. s'il n'y a pas de préfixe persistant:
, la page utilisera une session en mémoire . En assignant la même partition
, plusieurs pages peuvent partager la même session. Si partition
est vide la session par défaut de l'application sera retournée.
Cette valeur ne peut être modifiée qu'avant la première navigation, puisque la session d'un processus de rendu actif ne peut pas changer. Les tentatives ultérieures de modification de la valeur échoueront avec une exception DOM.
allowpopups
<webview src="https://www.github.com/" allowpopups></webview>
Type: boolean
. Lorsque cet attribut est présent, la page hébergée sera autorisée à ouvrir de nouvelles fenêtres . Les popups sont désactivés par défaut.
webpreferences
<webview src="https://github.com" webpreferences="allowRunningInsecureContent, javascript=no"></webview>
C'est une string
qui est une liste de chaînes séparées par des virgules spécifiant les préférences web à définir pour la webview. La liste complète des préférences supportées peut être trouvée dans BrowserWindow.
La chaîne suit le même format que la chaîne de caractères dans window.open
. Un nom par lui même représente une valeur booléenne true
. Une préférence peut recevoir une autre valeur en incluant un =
, suivi de la valeur. Les valeurs spéciales yes
et 1
sont interprétées comme true
, tandis que no
et 0
sont interprétées comme false
.
enableblinkfeatures
<webview src="https://www.github.com/" enableblinkfeatures="PreciseMemoryInfo, CSSVariables"></webview>
Un string
qui est une liste de chaînes qui spécifie les fonctionnalités de blink à activer séparées par des ,
. La liste complète des chaînes de fonctionnalités supportées peut être trouvée dans le fichier RuntimeEnabledFeatures.json5 .
disableblinkfeatures
<webview src="https://www.github.com/" disableblinkfeatures="PreciseMemoryInfo, CSSVariables"></webview>
Un string
qui est une liste de chaînes qui spécifie les fonctionnalités de blink à désactiver séparées par des ,
. La liste complète des chaînes de fonctionnalités supportées peut être trouvée dans le fichier RuntimeEnabledFeatures.json5 .
Méthodes
La balise webview
possède les méthodes suivantes :
Remarque : L'élément webview doit être chargé avant d'utiliser ces méthodes.
Exemple
const webview = document.querySelector('webview')
webview.addEventListener('dom-ready', () => {
webview.openDevTools()
})
<webview>.loadURL(url[, options])
url
URL
Retourne Promise<void>
- La promesse se résoudra lorsque la page aura terminé de se charger (voir did-finish-load
), et sera rejettée si la page ne se charge pas (voir did-fail-load
).
Charge la webview avec url
, cette url
doit contenir le préfixe du protocole, comme par exemple http://
ou file://
.
<webview>.downloadURL(url[, options])
url
string
Lance le téléchargement de la ressource située à l'url
sans naviguer.
<webview>.getURL()
Retourne string
- l'URL de la page web hébergée.
<webview>.getTitle()
Retourne string
- Titre de la page hébergée.
<webview>.isLoading()
Retourne boolean
- Indique si la page hébergée est toujours en cours de chargement de ressources.
<webview>.isLoadingMainFrame()
Retourne boolean
- Si la frame principale (et pas seulement un iframe ou frames qu'il contient) sont toujours en chargement.
<webview>.isWaitingForResponse()
Retourne boolean
- Indique si la page web est en attente d'une première réponse de la ressource principale de la page.
<webview>.stop()
Arrête toute navigation en attente.
<webview>.reload()
Recharge la page web hébergée.
<webview>.reloadIgnoringCache()
Recharge la page hébergée en ignorant le cache.
<webview>.canGoBack()
Retourne boolean
- Indique si la page hébergée peut revenir en arrière.
<webview>.canGoForward()
Retourne boolean
- Indique si la page web hébergée peut naviguer vers l'avant.
<webview>.canGoToOffset(offset)
offset
Integer
Retourne boolean
- Indique si la page hébergée peut aller à offset
.
<webview>.clearHistory()
Efface l'historique de navigation.
<webview>.goBack()
Fait revenir en arrière la page hébergée.
<webview>.goForward()
Fait avancer la page hebergée.
<webview>.goToIndex(index)
index
Integer
Navigue jusqu'à l'index spécifié.
<webview>.goToOffset(offset)
offset
Integer
Navigue vers l'offset spécifié à partir de l' "entrée courante".
<webview>.isCrashed()
Retourne boolean
- Indique si le processus de rendu a planté.
<webview>.setUserAgent(userAgent)
userAgent
string
Surcharge l'agent utilisateur de la page hébergée.
<webview>.getUserAgent()
Retourne string
- l'agent utilisateur de la page hébergée.
<webview>.insertCSS(css)
css
string
Retourne Promise<string>
- Une promesse qui résout avec une clé pour le CSS inséré pouvant être utilisée plus tard pour supprimer le CSS via <webview>.removeInsertedCSS(key)
.
Injecte du CSS dans la page Web actuelle et renvoie une clé unique pour la feuille de style insérée .
<webview>.removeInsertedCSS(key)
key
string
Retourne Promise<void>
- se résolvant si la suppression a réussi.
Supprime de la page web actuelle le CSS inséré. La feuille de style est identifiée par sa clé, qui est retournée par <webview>.insertCSS(css)
.
<webview>.executeJavaScript(code[, userGesture])
code
stringuserGesture
boolean (facultatif) -false
par défaut.
Retourne Promise<any>
- Une promesse qui se résout avec le résultat du code exécuté ou se rejette si le résultat du code est une promesse rejetée.
Évalue le code
dans la page. Si userGesture
est défini à true, il créera le contexte gestuel de l'utilisateur dans la page. Les API HTML comme requestFullScreen
, qui nécessitent une action de l'utilisateur , peuvent profiter de cette option pour l'automatisation.
<webview>.openDevTools()
Ouvre une fenêtre DevTools pour la page hébergée.
<webview>.closeDevTools()
Ferme la fenêtre DevTools de la page hébergée.
<webview>.isDevToolsOpened()
Retourne boolean
- Indique si la page hébergée est attachée à une fenêtre de DevTools.
<webview>.isDevToolsFocused()
Retourne boolean
- Si la fenêtre DevTools de la page hébergée a le focus.
<webview>.inspectElement(x, y)
x
Integery
Integer
Démarre l’inspection de l’élément en position (x
, y
) de la page hébergée.
<webview>.inspectSharedWorker()
Ouvre les DevTools pour le contexte du worker partagé présent dans la page hébergée.
<webview>.inspectServiceWorker()
Ouvre les DevTools pour le contexte du worker partagé présent dans la page hébergée.
<webview>.setAudioMuted(muted)
muted
boolean
Coupe le son de la page hébergée.
<webview>.isAudioMuted()
Retourne boolean
- Indique si la page web hébergée a été rendu muette.
<webview>.isCurrentlyAudible()
Retourne boolean
- Indique si l'audio est en cours de lecture.
<webview>.undo()
Exécute la commande d'édition undo
dans la page.
<webview>.redo()
Exécute l'édition de la commande redo
dans la page.
<webview>.cut()
Exécute l'édition de la commande cut
dans la page.
<webview>.copy()
Exécute l'édition de la commande copy
dans la page.
<webview>.centerSelection()
Centers the current text selection in page.
<webview>.paste()
Exécute l'édition de la commande paste
dans la page.
<webview>.pasteAndMatchStyle()
Exécute l'édition de la commande pasteAndMatchStyle
dans la page.
<webview>.delete()
Exécute l'édition de la commande delete
dans la page.
<webview>.selectAll()
Exécute l'édition de la commande selectAll
dans la page.
<webview>.unselect()
Exécute l'édition de la commande unselect
dans la page.
<webview>.scrollToTop()
Défile vers le haut de la <webview>
actuelle.
<webview>.scrollToBottom()
Défile vers le bas de la <webview>
actuelle.
<webview>.adjustSelection(options)
- Objet
options
start
Number (facultatif) - Valeur du déplacement de l'index de début de la sélection actuelle.end
Number (facultatif) - Valeur du déplacement de l'index de fin de la sélection actuelle.
Ajuste les points de début et de fin de la sélection de texte en cours dans la frame ayant le focus sur les valeurs indiquées. Une valeur négative déplacera la sélection vers le début du document et une positive vers la fin du document.
See webContents.adjustSelection
for examples.
<webview>.replace(text)
text
string
Exécute l'édition de la commande replace
dans la page.
<webview>.replaceMisspelling(text)
text
string
Exécute l'édition de la commande replaceMisspelling
dans la page.
<webview>.insertText(text)
text
string
Retourne Promise<void>
Insère le text
à l'élément ciblé.
<webview>.findInPage(text[, options])
text
string - Contenu à rechercher, ne doit pas être vide.
Retourne Integer
- L'identifiant de requête utilisé pour la requête.
Démarre une requête pour trouver toutes les concordances avec le text
dans la page web. Le résultat de la requête peut être obtenu en s'abonnant à l'événement found-in-page
.
<webview>.stopFindInPage(action)
action
string - Spécifie l'action à effectuer à la fin de la requête<webview>.findInPage
.clearSelection
- Effacer la sélection.keepSelection
- Convertir la sélection en une sélection normale.activateSelection
- Donne le focus au node de la sélection et effectue un click.
Arrête toute requête findInPage
associée à l' action
fournie envers le webview
.
<webview>.print([options])
Retourne Promise<void>
Imprime la page web de la webview
. Même que webContents.print([options])
.
<webview>.printToPDF(options)
- Objet
options
landscape
booléen (facultatif) - Orientation du papier.true
pour le paysage,false
pour le portrait. false par défaut.displayHeaderFooter
boolean (facultatif) - Indique si on affiche l'en-tête et le pied de page. false par défaut.printBackground
boolean (facultatif) - Indique si om imprimer ou non les graphiques en arrière-plan. false par défaut.scale
number(optional) - Scale of the webpage rendering. 1 par défaut.pageSize
string | Taille (facultatif) - Spécifie la taille de la page du PDF généré. Peut êtreA0
,A1
,A2
,A3
,A4
,A5
,A6
,Legal
,Letter
,Tabloid
,Ledger
, ou un objet contenantheight
etwidth
pouces.Letter
par défaut.margins
Object (facultatif)top
number (facultatif) - Marge supérieure exprimée en pouces. 1cm par défaut (~0.4 pouce).bottom
number (facultatif) - Marge inférieure exprimée en pouces. 1cm par défaut (~0.4 pouce).left
number (facultatif) - Marge gauche exprimée en pouces. 1cm par défaut (~0.4 pouce).right
number (facultatif) - Marge droite exprimée en pouces. 1cm par défaut (~0.4 pouce).
pageRanges
string (facultatif) - Plage des pages à imprimer, ex: '1-5, 8, 11-13'. Par défaut: une chaîne vide, signifiant d'afficher toutes les pages.headerTemplate
string (facultatif) - Modèle du HTML de l'entête d'impression. Doit être un balisage HTML valide avec les classes suivantes utilisées pour y injecter les valeurs d’impression :date
(date d’impression formatée),title
(titre du document),url
(emplacement du document),pageNumber
(numéro de page actuel) ettotalPages
(nombre total de pages dans le document). Par exemple,<span class=title></span>
générera un span contenant le titre.footerTemplate
string (facultatif) - Modèle du HTML du pied de page d'impression. Doit utiliser le même format que leheaderTemplate
.preferCSSPageSize
boolean (facultatif) - Indique si on optera ou non pour la taille de page définie par le css. Faux par défaut, auquel cas le contenu sera mis à l'échelle pour s'adapter à la taille du papier.generateTaggedPDF
boolean (optional) Experimental - Whether or not to generate a tagged (accessible) PDF. false par défaut. As this property is experimental, the generated PDF may not adhere fully to PDF/UA and WCAG standards.generateDocumentOutline
boolean (optional) Experimental - Whether or not to generate a PDF document outline from content headers. false par défaut.
Retourne une Promise<Uint8Array>
-se résolvant avec des données PDF générées.
Imprime la page web de webview
au format PDF, est identique à webContents.printToPDF(options)
.
<webview>.capturePage([rect])
rect
Rectangle (optionnel) - La zone de la page dont on doit réaliser la capture.
Retourne Promise<NativeImage>
- résout avec une NativeImage
Capture un instantané de la zone de la page définie par rect
. Une capture de la page entière sera réalisée en l'absence de rect
.
<webview>.send(channel, ...args)
channel
string...args
any[]
Retourne Promise<void>
Envoi un message asynchrone et éventuellement un certain nombre d'arguments au processus de rendu via channel
. . Le processus de rendu peut gérer le message en écoutant l'événement channel
à l'aide du module ipcRenderer
.
Voir webContents.send pour des exemples.
<webview>.sendToFrame(frameId, channel, ...args)
frameId
[number, number] -[processId, frameId]
channel
string...args
any[]
Retourne Promise<void>
Envoi un message asynchrone et éventuellement un certain nombre d'arguments au processus de rendu via channel
. . Le processus de rendu peut gérer le message en écoutant l'événement channel
à l'aide du module ipcRenderer
.
Voir webContents.sendToFrame pour des exemples.
<webview>.sendInputEvent(event)
Retourne Promise<void>
Envoie un event
d’input à la page.
Voir webContents.sendInputEvent pour une description détaillée de l'objet event
.
<webview>.setZoomFactor(factor)
factor
number - Facteur de zoom.
Modifie le facteur de zoom en utilisant le facteur spécifié. Le Zoom factor est égal à la valeur du zoom exprimée en pourcent divisée par 100, donc 300% = 3.0.
<webview>.setZoomLevel(level)
level
number - Niveau de zoom.
Modifie le niveau de zoom jusqu'au niveau spécifié. La taille originale est de 0 et chaque incrément au-dessus ou en dessous représente un zoom de 20% supérieur ou inférieure jusqu'au limites de 300% et 50% de la taille originale, respectivement. La formule pour cela est 'scale:= 1,2 ^ level
.
NOTE: La politique du zoom au niveau de Chromium est same-origin, ce qui signifie que le niveau de zoom pour un domaine spécifique se propage à travers toutes les instances de fenêtres du même domaine. Une différenciation de l'URL des fenêtre assignera un niveau de zoom par fenêtre.
<webview>.getZoomFactor()
Retourne number
- Le facteur de zoom actuel.
<webview>.getZoomFactor()
Retourne number
- Le niveau de zoom actuel.
<webview>.setVisualZoomLevelLimits(minimumLevel, maximumLevel)
minimumLevel
numbermaximumLevel
number
Retourne Promise<void>
Définit le niveau maximum et minimum le niveau pinch-to-zoom.
<webview>.showDefinitionForSelection()
macOS
Affiche un dictionnaire contextuel qui recherche le mot sélectionné sur la page.
<webview>.getWebContentsId()
Retourne number
- L'ID WebContents de cette webview
.
Événements du DOM
Les événements DOM suivants sont disponibles pour la balise webview
:
Événement : 'load-commit'
Retourne :
url
stringisMainFrame
boolean
Emis lorsqu'un chargement a été accompli. Cela inclut la navigation dans le document actuel ainsi que les chargement au niveau des sous-frames, mais n'inclut pas les chargements asynchrones de ressources.
Événement : 'did-finish-load'
Émis lorsque la navigation a abouti, c'est à dire que le loader de l'onglet a cessé de tourner, et que l'événement onload
a été émis.
Événement : 'did-fail-load'
Retourne :
errorCode
IntegererrorDescription
stringvalidatedURL
stringisMainFrame
boolean
Cet événement est identique à did-finish-load
, mais se déclenche lorsque le chargement échoue ou a été annulé, par exemple par un appel à window.stop()
.