Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W najnowszej wersji aplikacje implementujące widżety systemu Windows mogą zdecydować się na wypełnienie zawartości widżetu za pomocą kodu HTML obsługiwanego ze zdalnego adresu URL. Wcześniej zawartość widżetu można było podać tylko w formacie schematu karty adaptacyjnej w ładunku JSON przekazanym od dostawcy do tablicy widżetów. Ponieważ dostawcy widżetów sieciowych muszą nadal dostarczać ładunek JSON karty adaptacyjnej, należy wykonać kroki opisane w sekcji Wdrażanie dostawcy widżetu w aplikacji systemu Windows w języku C# lub Wdrażanie dostawcy widżetu w aplikacji win32 (C++/WinRT).
Określanie adresu URL zawartości
Dostawcy widżetów przekazują ładunek JSON do tablicy widżetów z wywołaniem elementu WidgetManager.UpdateWidget. W przypadku widżetu internetowego zamiast dostarczać obiekt treści definiujący zawartość widżetu, należy określić pusty obiekt treści i zamiast tego dołączyć obiekt metadanych z polem webUrl wskazującym adres URL, który będzie dostarczać zawartość HTML dla widżetu.
{
"type": "AdaptiveCard",
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.6",
"body": [],
"metadata":
{
"webUrl": "https://www.contoso.com/widgetprovider.html"
}
}
Obsługa żądań zasobów
Dostawcy widżetów mogą określić ciąg filtru żądania internetowego dla widżetu w atrybucie WebRequestFilter elementu Definition w pliku manifestu pakietu dostawcy. Za każdym razem, gdy zawartość widżetu zażąda zasobu przez URI pasujący do filtra, żądanie zostanie przechwycone i przekierowane do implementacji dostawcy widżetu IWidgetResourceProvider.OnResourceRequested.
Wzorzec filtru jest wyrażany przy użyciu formatu opisanego w temacie Dopasowywanie wzorców. W razie potrzeby ciąg filtru w rejestracji musi używać Punycode. Wszystkie typy zawartości będą przekierowywane po dopasowaniu, więc filtr powinien rozpoznawać tylko zawartość, która ma zostać uzyskana za pośrednictwem dostawcy IWidgetResourceProvider w aplikacji. Aby uzyskać więcej informacji na temat formatu manifestu pakietu dostawcy widżetów, zobacz Format XML manifestu dostawcy widżetów.
Aby obsługiwać żądania zasobów, dostawcy widżetów muszą zaimplementować interfejs IWidgetResourceProvider .
internal class WidgetProvider : IWidgetProvider, IWidgetResourceProvider
W implementacji metody OnResourceRequested dostawcy widżetów mogą udostępniać żądane zasoby, ustawiając właściwość WidgetResourceRequestedArgs.Response na obiekt WidgetResourceResponse zawierający żądany zasób. Podczas uzyskiwania zasobu asynchronicznie dostawca powinien zażądać odroczenia, wywołując element WidgetResourceRequestedArgs.GetDeferral , a następnie zakończyć odroczenie po ustawieniu zasobu.
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();
}
Jeśli dostawca nie ustawi odpowiedzi na obiekt WidgetResourceRequestedArgs przekazany do metody, system pobierze zasób z sieci Web. W takim przypadku dostawca może zmodyfikować właściwość Headers obiektu WidgetResourceRequestedArgs.Request , na przykład w celu zapewnienia kontekstu użytkownika lub tokenów, a system użyje zaktualizowanych nagłówków podczas pobierania zasobu z Internetu.
Obsługa komunikatów do i z zawartości internetowej
Aby odbierać wiadomości tekstowe z zawartości widżetu, które zostały wysłane przy użyciu metody window.chrome.webview.postMessage JavaScript, dostawcy widżetów mogą wdrożyć interfejs IWidgetProviderMessage i metodę OnMessageReceived.
internal class WidgetProvider : IWidgetProvider, IWidgetProviderMessage
...
public void OnMessageReceived(WidgetMessageReceivedArgs args)
{
Console.WriteLine($"Message received from widget {args.WidgetContext.Id}: {args.Message}");
}
Dostawcy widżetów mogą wysyłać komunikat do zawartości internetowej widżetu, wywołując element WidgetManager.SendMessage. Musisz podać identyfikator widżetu, do którego jest wysyłany komunikat, czyli wartość określona w atrybucie Id elementu Definicji w pliku manifestu pakietu dostawcy. Aby uzyskać więcej informacji, zobacz Format XML manifestu pakietu dostawcy widżetów. Ciąg komunikatu może być prostym tekstem lub serializowaną postacią obiektu interpretowanego przez zawartość internetową. Aby uzyskać więcej informacji, zobacz PostWebMessageAsString.
var message = $"{{ \"current_location\": \"{ location }\" }}";
WidgetManager.GetDefault().SendMessageToContent("Weather_Widget", message);
Ograniczenia i wymagania
- Ta funkcja jest dostępna tylko dla użytkowników europejskiego obszaru gospodarczego (EOG). W EOG zainstalowane aplikacje, które implementują dostawcę kanału informacyjnego, mogą udostępniać kanał informacyjny na panelu widżetów.
Windows developer