Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W najnowszej wersji aplikacje implementujące widżety Windows mogą zdecydować się na wypełnienie zawartości widżetu kodem HTML obsługiwanym przez zdalny adres 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 sieci Web muszą nadal dostarczać ładunek JSON karty adaptacyjnej, należy wykonać kroki wdrażania dostawcy widżetu w Zaimplementować dostawcę widżetu w aplikacji Windows w języku C# lub Zaimplementować dostawcę 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 żąda zasobu według identyfikatora URI zgodnego z filtrem, żądanie zostanie przechwycone i przekierowane do implementacji dostawcy widżetu IWidgetResourceProvider.OnResourceRequested.
Wzorzec filtru jest wyrażany przy użyciu formatu opisanego w Match Patterns. W razie potrzeby w rejestracji ciąg filtru 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 treści widżetu, która została przesłana przy użyciu metody JavaScript window.chrome.webview.postMessage, dostawcy widżetów mogą zaimplementować interfejs IWidgetProviderMessage oraz 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.