Megosztás a következőn keresztül:


Web widget-szolgáltatók

A legújabb kiadásban a Windows widgeteket implementáló alkalmazások dönthetnek úgy, hogy a widget tartalmát egy távoli URL-címről kiszolgált HTML-lel töltik fel. Korábban a widget tartalmát csak adaptív kártya sémaformátumban lehetett megadni a szolgáltatótól a Widgets Boardnak átadott JSON hasznos adatban. Mivel a webes widget-szolgáltatóknak továbbra is rendelkezniük kell egy adaptív kártya JSON-payloaddal, kövesse a Widget-szolgáltató implementálási lépéseit Widget-szolgáltató implementálása C# Windows-alkalmazásban vagy, Widget-szolgáltató implementálása Win32-alkalmazásban (C++/WinRT).

A tartalom URL-címének megadása

A widgetszolgáltatók egy JSON-adatcsomagot adnak át a widgetpanelnek egy hívással a WidgetManager.UpdateWidgetfunkcióval. Webes widget esetén ahelyett, hogy egy törzset objektumot ad meg a widget tartalmának meghatározásához, meg kell adnia egy üres törzs objektumot, és ehelyett egy metaadatot objektumot kell tartalmaznia egy webUrl mezővel, amely a widget HTML-tartalmát tartalmazó URL-címre mutat.

{ 
    "type": "AdaptiveCard", 
    "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", 
    "version": "1.6", 
    "body": [], 
    "metadata": 
    { 
        "webUrl": "https://www.contoso.com/widgetprovider.html" 
    } 
} 

Erőforrás-kérelmek kezelése

A widgetszolgáltatók a csomagjegyzékfájljukban lévő Definíció elem WebRequestFilter attribútumában megadhatják a webes kérésszűrő karakterláncot. Amikor a widget tartalma egy URI által olyan erőforrást kér, amely megfelel a szűrő feltételeinek, a rendszer elfogja, és átirányítja a kérést a widget szolgáltató IWidgetResourceProvider.OnResourceRequestedimplementációjára.

A szűrőminta a Egyező mintázatokdokumentumban leírt formátumban van kifejezve. A regisztráció szűrősztringjének szükség esetén Punycode kell használnia. Minden tartalomtípust átirányítunk, ha megfelel, ezért a szűrőnek csak az alkalmazásban található IWidgetResourceProvider által lekérni kívánt tartalomra kell összpontosítania. A widget-szolgáltatói csomag jegyzékformátumával kapcsolatos további információkért lásd widgetszolgáltatói csomagjegyzék XML-formátumát.

Az erőforrás-kérelmek kezeléséhez a vezérlőszolgáltatóknak implementálniuk kell az IWidgetResourceProvider felületet.

internal class WidgetProvider : IWidgetProvider, IWidgetResourceProvider

Az OnResourceRequested metódus implementációjában a widgetszolgáltatók a kért erőforrásokat úgy biztosíthatják, hogy a WidgetResourceRequestedArgs.Response tulajdonságot egy WidgetResourceResponse objektumra állítja, amely a kért erőforrást tartalmazza. Az erőforrás aszinkron beszerzésekor a szolgáltatónak halasztást kell kérnie a WidgetResourceRequestedArgs.GetDeferral meghívásával, majd az erőforrás beállításakor végezze el a halasztást.

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();
}

Ha a szolgáltató nem állít be választ a WidgetResourceRequestedArgs metódusnak átadott objektumra, a rendszer lekéri az erőforrást a webből. Ebben az esetben a szolgáltató módosíthatja a WidgetResourceRequestedArgs.Request objektum Fejlécek tulajdonságát, például felhasználói környezet vagy jogkivonatok megadását, és a rendszer a frissített fejléceket fogja használni az erőforrás webes beolvasásakor.

Webes tartalmakba érkező és onnan érkező üzenetek kezelése

Ha sztringüzeneteket szeretne fogadni a widget window.chrome.webview.postMessage JavaScript metódussal közzétett tartalmából, a widget-szolgáltatók implementálhatják az IWidgetProviderMessage felületet, és implementálhatják az OnMessageReceived metódust.

internal class WidgetProvider : IWidgetProvider, IWidgetProviderMessage
...
public void OnMessageReceived(WidgetMessageReceivedArgs args)
{
    Console.WriteLine($"Message received from widget {args.WidgetContext.Id}: {args.Message}");
}

A widgetszolgáltatók WidgetManager.SendMessagemeghívásával üzenetet küldhetnek a widget webes tartalmának. Meg kell adnia annak a widgetnek az azonosítóját, amelyre az üzenetet küldi, amely a szolgáltató csomagjegyzékfájljának Definíció elemének Azonosító attribútumában megadott érték. További információ: widgetszolgáltatói csomagjegyzék XML-formátuma. Az üzenetsztring lehet egyszerű szöveg vagy a webes tartalom által értelmezett objektum szerializált formája. További információkért lásd: PostWebMessageAsString.

var message = $"{{ \"current_location\": \"{ location }\" }}";
WidgetManager.GetDefault().SendMessageToContent("Weather_Widget", message);

Korlátozások és követelmények

  • Ez a funkció csak az Európai Gazdasági Térség (EGT) felhasználói számára érhető el. Az EGT-ben a hírcsatorna-szolgáltatót megvalósító telepített alkalmazások tartalomcsatornát biztosíthatnak a Widgets Boardban.