Aracılığıyla paylaş


Web pencere öğesi sağlayıcıları

En son sürümde, Windows pencere öğeleri uygulayan uygulamalar, pencere öğesi içeriğini uzak URL'den sunulan HTML ile doldurmayı seçebilir. Daha önce pencere öğesi içeriği yalnızca sağlayıcıdan Pencere Öğeleri Panosu'na geçirilen JSON yükünde Uyarlamalı Kart şema biçiminde sağlanabilirdi. Web pencere öğesi sağlayıcılarının hala Uyarlamalı Kart JSON yükü sağlaması gerektiğinden, Bir C# Windows App veya Bir pencere öğesi sağlayıcısını win32 uygulamasında (C++/WinRT)'de uygulama adımlarını izlemeniz gerekir.

İçerik URL'sini belirtme

Pencere öğesi sağlayıcıları, WidgetManager.UpdateWidget çağrısıyla Widgets Panosu'na bir JSON yükü geçirir. Web pencere öğesi için, pencere öğesi içeriğini tanımlayan bir gövde nesnesi sağlamak yerine boş bir gövde nesnesi belirtmeniz ve bunun yerine pencere öğesi için HTML içeriğini sağlayacak URL'yi işaret eden webUrl alanına sahip bir meta veri nesnesi eklemeniz gerekir.

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

Kaynak isteklerini işleme

Pencere öğesi sağlayıcıları, sağlayıcının paket bildirim dosyasındaki Tanım öğesinin WebRequestFilter özniteliğindeki bir pencere öğesi için bir web isteği filtre dizesi belirtebilir. Pencere öğesi içeriği filtreyle eşleşen URI'ye göre bir kaynak istediğinde, istek durdurulur ve pencere öğesi sağlayıcısının IWidgetResourceProvider.OnResourceRequested uygulamasına yönlendirilir.

Filtre düzeni, Desenleri Eşleştir bölümünde açıklanan biçim kullanılarak ifade edilir. Kayıttaki filtre dizesi gerektiğinde Punycode kullanmalıdır. Tüm içerik türleri eşleştirildiğinde yeniden yönlendirilir, bu nedenle filtrenin yalnızca uygulamadaki IWidgetResourceProvider aracılığıyla elde edilmesi amaçlanan içeriğe çözümlenmesi gerekir. Widget sağlayıcı paket manifest biçimi hakkında daha fazla bilgi için Widget sağlayıcı paket manifesti XML biçimi bölümüne bakın.

Kaynak isteklerini işlemek için pencere öğesi sağlayıcılarının IWidgetResourceProvider arabirimini uygulaması gerekir.

internal class WidgetProvider : IWidgetProvider, IWidgetResourceProvider

OnResourceRequested yönteminin uygulanmasında pencere öğesi sağlayıcıları, istenen kaynağı içeren bir WidgetResourceResponse nesnesine WidgetResourceRequestedArgs.Response özelliğini ayarlayarak istenen kaynakları sağlayabilir. Kaynağı zaman uyumsuz olarak alırken sağlayıcı, WidgetResourceRequestedArgs.GetDeferral çağrısı yaparak erteleme isteğinde bulunmalı ve kaynak ayarlandığında ertelemeyi tamamlamalıdır.

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

Sağlayıcı yöntemine geçirilen WidgetResourceRequestedArgs nesnesinde bir yanıt ayarlamazsa, sistem kaynağı web'den alır. Bu durumda sağlayıcı kullanıcı bağlamı veya belirteçleri sağlamak gibi WidgetResourceRequestedArgs.Request nesnesinin Headers özelliğini değiştirmeyi seçebilir ve sistem, kaynağı web'den alırken güncelleştirilmiş üst bilgileri kullanır.

Web içeriğine gelen ve web içeriğinden gelen iletileri işleme

Pencere öğesi içeriğinden window.chrome.webview.postMessage JavaScript yöntemi kullanılarak gönderilen dize iletilerini almak için, pencere öğesi sağlayıcıları IWidgetProviderMessage arabirimini uygulayabilir ve OnMessageReceived yöntemini uygulayabilir.

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

Pencere öğesi sağlayıcıları WidgetManager.SendMessage'ı çağırarak pencere öğesinin web içeriğine bir ileti gönderebilir. Mesajın gönderildiği widget'ın kimliğini sağlamanız gerekir; bu kimlik, sağlayıcının paket bildirim dosyasındaki Tanım öğesinin Id özniteliğinde belirtilen değerdir. Daha fazla bilgi için, Pencere öğesi sağlayıcının paket bildirim XML biçimini inceleyin. İleti dizesi basit metin veya web içeriği tarafından yorumlanan bir nesnenin serileştirilmiş biçimi olabilir. Daha fazla bilgi için bkz . PostWebMessageAsString.

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

Sınırlamalar ve gereksinimler

  • Bu özellik yalnızca Avrupa Ekonomik Alanı'ndaki (EEA) kullanıcılar tarafından kullanılabilir. EEA'da, bir akış sağlayıcısı uygulayan yüklü uygulamalar, Pencere Öğeleri Panosu'nda içerik akışı sağlayabilir.