Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In der neuesten Version können Apps, die Windows Widgets implementieren, auswählen, den Widgetinhalt mit HTML zu befüllen, das über eine Remote-URL bereitgestellt wird. Bisher konnte der Widget-Inhalt nur im Adaptive Card-Schema-Format in der JSON-Nutzlast bereitgestellt werden, die vom Anbieter an das Widgets Board übergeben wurde. Da Web-Widget-Anbieter weiterhin eine JSON-Payload für Adaptive Card bereitstellen müssen, sollten Sie die Schritte zum Implementieren eines Widget-Anbieters in Implementieren eines Widget-Anbieters in einer C#-Windows-App oder Implementieren eines Widget-Anbieters in einer win32-App (C++/WinRT) befolgen.
Angeben der Inhalts-URL
Widgetanbieter übergeben eine JSON-Nutzlast an das Widgets Board mit einem Aufruf von WidgetManager.UpdateWidget. Für ein Web-Widget sollten Sie anstelle eines Textkörperobjekts , das den Widgetinhalt definiert, ein leeres Textkörperobjekt angeben und stattdessen ein Metadatenobjekt mit einem WebUrl-Feld einschließen, das auf die URL verweist, die den HTML-Inhalt für das Widget bereitstellt.
{
"type": "AdaptiveCard",
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.6",
"body": [],
"metadata":
{
"webUrl": "https://www.contoso.com/widgetprovider.html"
}
}
Umgang mit Ressourcenanforderungen
Widgetanbieter können eine Webanforderungsfilterzeichenfolge für ein Widget im WebRequestFilter-Attribut des Definition-Elements in der Paketmanifestdatei des Anbieters angeben. Wann immer der Widget-Inhalt eine Ressource mit einer URI anfordert, die den Filter erfüllt, wird die Anforderung abgefangen und zur Implementierung von IWidgetResourceProvider.OnResourceRequested umgeleitet.
Das Filtermuster wird mit dem in Übereinstimmungsmustern beschriebenen Format ausgedrückt. Die Filterzeichenfolge in der Registrierung muss bei Bedarf Punycode verwenden. Alle Inhaltstypen werden bei Übereinstimmungen umgeleitet, daher sollte der Filter nur auf die Inhalte verweisen, die über den IWidgetResourceProvider in der Anwendung abgerufen werden sollen. Weitere Informationen zum Paketmanifestformat des Widgetanbieters finden Sie im XML-Format des Widgetanbieterpaketmanifests.
Um Ressourcenanforderungen zu verarbeiten, müssen Widgetanbieter die IWidgetResourceProvider-Schnittstelle implementieren.
internal class WidgetProvider : IWidgetProvider, IWidgetResourceProvider
Bei der Implementierung der OnResourceRequested-Methode können Widgetanbieter die angeforderten Ressourcen bereitstellen, indem sie die WidgetResourceRequestedArgs.Response-Eigenschaft auf ein WidgetResourceResponse-Objekt festlegen, das die angeforderte Ressource enthält. Beim asynchronen Abrufen der Ressource sollte der Anbieter eine Verzögerung anfordern, indem WidgetResourceRequestedArgs.GetDeferral aufgerufen wird, und dann die Verzögerung abschließen, wenn die Ressource festgelegt wurde.
async void IWidgetResourceProvider.OnResourceRequested(WidgetResourceRequestedArgs args)
{
var deferral = args.GetDeferral();
if (args.Request.Uri.Length > 0)
{
if (args.Request.Uri == "https://contoso.com/logo-image")
{
string fullPath = Windows.ApplicationModel.Package.Current.InstalledPath + "/Assets/image.png";
var file = await StorageFile.GetFileFromPathAsync(fullPath);
var response = new WidgetResourceResponse(RandomAccessStreamReference.CreateFromFile(file), "OK", 200);
response.Headers.Add("Content-Type", "image/png");
args.Response = response;
}
}
deferral.Complete();
}
Wenn der Anbieter keine Antwort für das an die Methode übergebene WidgetResourceRequestedArgs-Objekt festgelegt hat, ruft das System die Ressource aus dem Web ab. In diesem Fall kann der Anbieter die Headers-Eigenschaft des WidgetResourceRequestedArgs.Request-Objekts ändern, z. B. um Benutzerkontext oder Token bereitzustellen, und das System verwendet die aktualisierten Header beim Abrufen der Ressource aus dem Web.
Umgang mit Nachrichten zu und von Webinhalten
Um Zeichenfolgenmeldungen vom Inhalt des Widgets zu empfangen, der mit der Methode window.chrome.webview.postMessage JavaScript gepostet wurde, können Widgetanbieter die IWidgetProviderMessage-Schnittstelle implementieren und die OnMessageReceived-Methode implementieren.
internal class WidgetProvider : IWidgetProvider, IWidgetProviderMessage
...
public void OnMessageReceived(WidgetMessageReceivedArgs args)
{
Console.WriteLine($"Message received from widget {args.WidgetContext.Id}: {args.Message}");
}
Widgetanbieter können eine Nachricht an den Webinhalt des Widgets senden, indem Sie WidgetManager.SendMessage aufrufen. Sie müssen die ID des Widgets angeben, an das die Nachricht gesendet wird. Dies ist der wert, der im Id-Attribut des Definition-Elements in der Paketmanifestdatei des Anbieters angegeben ist. Weitere Informationen finden Sie im XML-Format des Widget-Anbieterpaketmanifests. Die Nachrichtenzeichenfolge kann einfacher Text oder die serialisierte Form eines Objekts sein, das von einer Webanwendung interpretiert wird. Weitere Informationen finden Sie unter PostWebMessageAsString.
var message = $"{{ \"current_location\": \"{ location }\" }}";
WidgetManager.GetDefault().SendMessageToContent("Weather_Widget", message);
Einschränkungen und Anforderungen
- Dieses Feature ist nur für Benutzer im Europäischen Wirtschaftsraum (EWR) verfügbar. Im EWR können installierte Apps, die einen Feedanbieter implementieren, Inhaltsfeeds im Widgets Board bereitstellen.
Windows developer