WebView class
window.chrome.webview
est la classe permettant d’accéder aux API spécifiques à WebView2 disponibles pour le script en cours d’exécution dans WebView2 Runtime.
- Extends
Propriétés
host |
Contient des proxys asynchrones pour tous les objets hôtes ajoutés via Si vous appelez |
Méthodes
add |
Méthode standard |
post |
Lorsque la page appelle |
post |
Lorsque la page appelle |
release |
Appelez avec le |
remove |
Méthode standard |
Détails de la propriété
hostObjects
Contient des proxys asynchrones pour tous les objets hôtes ajoutés via CoreWebView2.AddHostObjectToScript
, ainsi que des options pour configurer ces proxys et le conteneur pour les proxys synchrones.
Si vous appelez coreWebView2.AddHostObjectToScript("myObject", object);
dans votre code natif, un proxy asynchrone pour object
est disponible pour votre code côté web, à l’aide chrome.webview.hostObjects.myObject
de .
hostObjects: HostObjectsAsyncRoot;
Valeur de propriété
Exemples
Par exemple, supposons que vous ayez un objet COM avec l’interface suivante :
[uuid(3a14c9c0-bc3e-453f-a314-4ce4a0ec81d8), object, local]
interface IHostObjectSample : IUnknown
{
// Demonstrate basic method call with some parameters and a return value.
HRESULT MethodWithParametersAndReturnValue([in] BSTR stringParameter, [in] INT integerParameter, [out, retval] BSTR* stringResult);
// Demonstrate getting and setting a property.
[propget] HRESULT Property([out, retval] BSTR* stringResult);
[propput] HRESULT Property([in] BSTR stringValue);
[propget] HRESULT IndexedProperty(INT index, [out, retval] BSTR * stringResult);
[propput] HRESULT IndexedProperty(INT index, [in] BSTR stringValue);
// Demonstrate native calling back into JavaScript.
HRESULT CallCallbackAsynchronously([in] IDispatch* callbackParameter);
// Demonstrate a property which uses Date types
[propget] HRESULT DateProperty([out, retval] DATE * dateResult);
[propput] HRESULT DateProperty([in] DATE dateValue);
// Creates a date object on the native side and sets the DateProperty to it.
HRESULT CreateNativeDate();
};
Ajoutez un instance de cette interface dans votre JavaScript avec AddHostObjectToScript
. Dans ce cas, nommez-le sample
.
Dans le code de l’application hôte native :
VARIANT remoteObjectAsVariant = {};
m_hostObject.query_to<IDispatch>(&remoteObjectAsVariant.pdispVal);
remoteObjectAsVariant.vt = VT_DISPATCH;
// We can call AddHostObjectToScript multiple times in a row without // calling RemoveHostObject first. This will replace the previous object // with the new object. In our case, this is the same object, and everything // is fine.
CHECK_FAILURE(
m_webView->AddHostObjectToScript(L"sample", &remoteObjectAsVariant));
remoteObjectAsVariant.pdispVal->Release();
Dans le document HTML, utilisez l’objet COM à l’aide de chrome.webview.hostObjects.sample
.
document.getElementById("getPropertyAsyncButton").addEventListener("click", async () => {
const propertyValue = await chrome.webview.hostObjects.sample.property;
document.getElementById("getPropertyAsyncOutput").textContent = propertyValue;
});
document.getElementById("getPropertySyncButton").addEventListener("click", () => {
const propertyValue = chrome.webview.hostObjects.sync.sample.property;
document.getElementById("getPropertySyncOutput").textContent = propertyValue;
});
document.getElementById("setPropertyAsyncButton").addEventListener("click", async () => {
const propertyValue = document.getElementById("setPropertyAsyncInput").value;
// The following line will work but it will return immediately before the property value has actually been set.
// If you need to set the property and wait for the property to change value, use the setHostProperty function.
chrome.webview.hostObjects.sample.property = propertyValue;
document.getElementById("setPropertyAsyncOutput").textContent = "Set";
});
document.getElementById("setPropertyExplicitAsyncButton").addEventListener("click", async () => {
const propertyValue = document.getElementById("setPropertyExplicitAsyncInput").value;
// If you care about waiting until the property has actually changed value, use the setHostProperty function.
await chrome.webview.hostObjects.sample.setHostProperty("property", propertyValue);
document.getElementById("setPropertyExplicitAsyncOutput").textContent = "Set";
});
document.getElementById("setPropertySyncButton").addEventListener("click", () => {
const propertyValue = document.getElementById("setPropertySyncInput").value;
chrome.webview.hostObjects.sync.sample.property = propertyValue;
document.getElementById("setPropertySyncOutput").textContent = "Set";
});
document.getElementById("getIndexedPropertyAsyncButton").addEventListener("click", async () => {
const index = parseInt(document.getElementById("getIndexedPropertyAsyncParam").value);
const resultValue = await chrome.webview.hostObjects.sample.IndexedProperty[index];
document.getElementById("getIndexedPropertyAsyncOutput").textContent = resultValue;
});
document.getElementById("setIndexedPropertyAsyncButton").addEventListener("click", async () => {
const index = parseInt(document.getElementById("setIndexedPropertyAsyncParam1").value);
const value = document.getElementById("setIndexedPropertyAsyncParam2").value;;
chrome.webview.hostObjects.sample.IndexedProperty[index] = value;
document.getElementById("setIndexedPropertyAsyncOutput").textContent = "Set";
});
document.getElementById("invokeMethodAsyncButton").addEventListener("click", async () => {
const paramValue1 = document.getElementById("invokeMethodAsyncParam1").value;
const paramValue2 = parseInt(document.getElementById("invokeMethodAsyncParam2").value);
const resultValue = await chrome.webview.hostObjects.sample.MethodWithParametersAndReturnValue(paramValue1, paramValue2);
document.getElementById("invokeMethodAsyncOutput").textContent = resultValue;
});
document.getElementById("invokeMethodSyncButton").addEventListener("click", () => {
const paramValue1 = document.getElementById("invokeMethodSyncParam1").value;
const paramValue2 = parseInt(document.getElementById("invokeMethodSyncParam2").value);
const resultValue = chrome.webview.hostObjects.sync.sample.MethodWithParametersAndReturnValue(paramValue1, paramValue2);
document.getElementById("invokeMethodSyncOutput").textContent = resultValue;
});
let callbackCount = 0;
document.getElementById("invokeCallbackButton").addEventListener("click", async () => {
chrome.webview.hostObjects.sample.CallCallbackAsynchronously(() => {
document.getElementById("invokeCallbackOutput").textContent = "Native object called the callback " + (++callbackCount) + " time(s).";
});
});
// Date property
document.getElementById("setDateButton").addEventListener("click", () => {
chrome.webview.hostObjects.options.shouldSerializeDates = true;
chrome.webview.hostObjects.sync.sample.dateProperty = new Date();
document.getElementById("dateOutput").textContent = "sample.dateProperty: " + chrome.webview.hostObjects.sync.sample.dateProperty;
});
document.getElementById("createRemoteDateButton").addEventListener("click", () => {
chrome.webview.hostObjects.sync.sample.createNativeDate();
document.getElementById("dateOutput").textContent = "sample.dateProperty: " + chrome.webview.hostObjects.sync.sample.dateProperty;
});
Détails de la méthode
addEventListener(type, listener, options)
Méthode standard EventTarget.addEventListener
. Utilisez-la pour vous abonner à l’événement ou sharedbufferreceived
à l’événementmessage
. L’événement message
reçoit les messages publiés à partir de l’hôte WebView2 via CoreWebView2.PostWebMessageAsJson
ou CoreWebView2.PostWebMessageAsString
. L’événement sharedbufferreceived
reçoit des mémoires tampons partagées publiées à partir de l’hôte WebView2 via CoreWebView2.PostSharedBufferToScript
.
Consultez CoreWebView2.PostWebMessageAsJson( Win32/C++, .NET, WinRT).
addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
Paramètres
- type
-
string
Nom de l’événement auquel s’abonner. Les valeurs valides sont message
, et sharedbufferreceived
.
- listener
-
EventListenerOrEventListenerObject
Rappel à appeler lorsque l’événement est déclenché.
- options
-
boolean | AddEventListenerOptions
Options permettant de contrôler la façon dont l’événement est géré.
Retours
void
postMessage(message)
Lorsque la page appelle postMessage
, le message
paramètre est converti en JSON et publié de façon asynchrone dans le processus hôte WebView2. Cela entraîne la levée de l’événement CoreWebView2.WebMessageReceived
ou de l’événement CoreWebView2Frame.WebMessageReceived
, selon que postMessage
est appelé à partir du document de niveau supérieur dans webView2 ou à partir d’un frame enfant. Consultez CoreWebView2.WebMessageReceived( Win32/C++, .NET, WinRT). Consultez CoreWebView2Frame.WebMessageReceived( Win32/C++, .NET, WinRT).
postMessage(message: any) : void;
Paramètres
- message
-
any
Message à envoyer à l’hôte WebView2. Il peut s’agir de n’importe quel objet qui peut être sérialisé au format JSON.
Retours
void
Remarques
Exemples
Publiez un message sur :CoreWebView2
const inTopLevelFrame = (window === window.parent);
if (inTopLevelFrame) {
// The message can be any JSON serializable object.
window.chrome.webview.postMessage({
myMessage: 'Hello from the script!',
otherValue: 1}
);
// A simple string is an example of a JSON serializable object.
window.chrome.webview.postMessage("example");
}
postMessageWithAdditionalObjects(message, additionalObjects)
Lorsque la page appelle postMessageWithAdditionalObjects
, le message
paramètre est envoyé à WebView2 de la même façon que « postMessage ». Les objets passés en tant que « additionalObjects » sont convertis en leurs types natifs et seront disponibles dans la CoreWebView2WebMessageReceivedEventArgs.AdditionalObjects
propriété .
postMessageWithAdditionalObjects(message: any, additionalObjects: ArrayLike<any>) : void;
Paramètres
- message
-
any
Message à envoyer à l’hôte WebView2. Il peut s’agir de n’importe quel objet qui peut être sérialisé au format JSON.
- additionalObjects
-
ArrayLike<any>
Séquence d’objets DOM qui ont des représentations natives dans WebView2. Ce paramètre doit être ArrayLike. Les types DOM suivants sont mappés au mode natif :
DOM | Win32 | .NET | WinRT |
---|---|---|---|
Fichier | ICoreWebView2File | System.IO.FileInfo | Windows.Storage.StorageFile |
null
ou undefined
les entrées seront passées en tant que null
type dans WebView2. Sinon, si un objet non valide ou non pris en charge est passé via cette API, une exception est levée et le message ne parvient pas à être affiché.
Retours
void
Remarques
Exemples
Publiez un message qui inclut des objets File d’un élément d’entrée dans CoreWebView2 :
const input = document.getElementById('files');
input.addEventListener('change', function() {
// Note that postMessageWithAdditionalObjects does not accept a single object,
// but only accepts an ArrayLike object.
// However, input.files is type FileList, which is already an ArrayLike object so
// no conversion to array is needed.
const currentFiles = input.files;
chrome.webview.postMessageWithAdditionalObjects("FilesDropped",
currentFiles);
});
releaseBuffer(buffer)
Appelez avec le ArrayBuffer
à partir de l’événement chrome.webview.sharedbufferreceived
pour libérer la ressource de mémoire partagée sous-jacente.
releaseBuffer(buffer: ArrayBuffer): void;
Paramètres
- buffer
-
ArrayBuffer
de ArrayBuffer
l’événement chrome.webview.sharedbufferreceived
.
Retours
void
removeEventListener(type, listener, options)
Méthode standard EventTarget.removeEventListener
. Utilisez-le pour vous désabonner de l’événement message
ou sharedbufferreceived
.
removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
Paramètres
- type
-
string
Nom de l’événement dont vous souhaitez vous désabonner. Les valeurs valides sont message
et sharedbufferreceived
.
- listener
-
EventListenerOrEventListenerObject
Rappel à supprimer de l’événement.
- options
-
boolean | EventListenerOptions
Options permettant de contrôler la façon dont l’événement est géré.
Retours
void