Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Aplikace, které implementují widgety Windows, se můžou rozhodnout naplnit obsah widgetu kódem HTML obsluhované ze vzdálené adresy URL. Dříve bylo možné obsah widgetu dodat pouze ve formátu schématu adaptivní karty v JSON payloadu předaném poskytovatelem na nástěnku widgetů. Jelikož poskytovatelé webových widgetů musí stále poskytovat datovou část JSON adaptivní karty, měli byste se řídit procesem implementace poskytovatele widgetu v Implementace poskytovatele widgetu v C# aplikace pro Windows nebo Implementace poskytovatele widgetu v aplikaci win32 (C++/WinRT).
Zadání adresy URL obsahu
Poskytovatelé widgetů předají datovou část JSON na Widgets Board s voláním WidgetManager.UpdateWidget. U webového widgetu místo poskytnutí základního objektu definující obsah widgetu byste měli zadat prázdný základní objekt a místo toho zahrnout objekt metadat s polem webUrl , které odkazuje na adresu URL, která poskytne obsah HTML widgetu.
{
"type": "AdaptiveCard",
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.6",
"body": [],
"metadata":
{
"webUrl": "https://www.contoso.com/widgetprovider.html"
}
}
Zpracování požadavků na prostředky
Zprostředkovatelé widgetů mohou zadat řetězec filtru webového požadavku pro widget v atributu WebRequestFilterelementu Definition v souboru manifestu balíčku zprostředkovatele. Kdykoli obsah widgetu požaduje prostředek na základě URI odpovídajícího filtru, požadavek bude zachycen a přesměrován na implementaci poskytovatele widgetu IWidgetResourceProvider.OnResourceRequested.
Vzor filtru se vyjadřuje pomocí formátu popsaného ve vzorech shody. V případě potřeby musí řetězec filtru v registraci používat punycode . Všechny typy obsahu budou při spárování přesměrovány, takže filtr by měl odkazovat pouze na obsah určený k získání prostřednictvím IWidgetResourceProvider v aplikaci. Další informace o formátu manifestu balíčku zprostředkovatele widgetu naleznete v tématu Formát XML manifestu balíčku zprostředkovatele widgetu.
Aby mohli poskytovatelé widgetů zpracovávat požadavky na prostředky, musí implementovat rozhraní IWidgetResourceProvider .
internal class WidgetProvider : IWidgetProvider, IWidgetResourceProvider
Při implementaci metody OnResourceRequested mohou zprostředkovatelé widgetu poskytnout požadované prostředky nastavením vlastnosti WidgetResourceRequestedArgs.Response na objekt WidgetResourceResponse, který obsahuje požadovaný prostředek. Při asynchronním získání prostředku by měl poskytovatel požádat o odložení voláním WidgetResourceRequestedArgs.GetDeferral a potom dokončit odložení, jakmile je prostředek nastaven.
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();
}
Pokud poskytovatel nenastaví odpověď na objekt WidgetResourceRequestedArgs předaný do metody, systém načte prostředek z webu. V tomto případě může poskytovatel změnit vlastnost Headers objektu WidgetResourceRequestedArgs.Request, například za účelem poskytnutí uživatelského kontextu nebo tokenů, a systém použije aktualizované hlavičky při získávání prostředku z webu.
Zpracování zpráv k a z webového obsahu
Chcete-li přijímat řetězcové zprávy z obsahu widgetu, který byl publikován pomocí window.chrome.webview.postMessage JavaScript metoda, zprostředkovatelé widgetu mohou implementovat IWidgetProviderMessage rozhraní a implementovat OnMessageReceived metoda.
internal class WidgetProvider : IWidgetProvider, IWidgetProviderMessage
...
public void OnMessageReceived(WidgetMessageReceivedArgs args)
{
Console.WriteLine($"Message received from widget {args.WidgetContext.Id}: {args.Message}");
}
Poskytovatelé widgetů mohou odeslat zprávu do webového obsahu widgetu voláním WidgetManager.SendMessage. Musíte zadat ID widgetu, do kterého se zpráva odešle, což je hodnota zadaná v atributu IDelementu Definition v souboru manifestu balíčku zprostředkovatele. Další informace naleznete v tématu Formát XML manifestu balíčku zprostředkovatele widgetu. Řetězec zprávy může být jednoduchý text nebo serializovaná forma objektu interpretovaného webovým obsahem. Další informace naleznete v tématu PostWebMessageAsString.
var message = $"{{ \"current_location\": \"{ location }\" }}";
WidgetManager.GetDefault().SendMessageToContent("Weather_Widget", message);
Omezení a požadavky
Important
Tato funkce je k dispozici pouze uživatelům v Evropském hospodářském prostoru (EHP). V EHP mohou nainstalované aplikace, které podporují poskytovatele kanálu, poskytovat na panelu Widgety kanál obsahu.
Windows developer