Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В последнем выпуске приложения, реализующие виджеты Windows, могут заполнять содержимое виджетов HTML, обслуживаемым из удаленного URL-адреса. Ранее содержимое мини-приложения могло быть предоставлено только в формате схемы адаптивной карты в полезных данных JSON, передаваемых поставщиком на Доску мини-приложений. Так как поставщики веб-мини-приложений по-прежнему должны предоставлять полезные данные JSON адаптивной карточки, необходимо выполнить действия по реализации поставщика мини-приложений в приложении C# для Windows или реализации поставщика мини-приложений в приложении win32 (C++/WinRT).
Укажите URL-адрес содержимого
Поставщики мини-приложений передают полезные данные JSON в Доску мини-приложений с вызовом WidgetManager.UpdateWidget. Для веб-мини-приложения вместо предоставления основного объекта, определяющего содержимое мини-приложения, следует указать пустой объект тела и вместо этого включить объект метаданных с полем webUrl, которое указывает на URL-адрес, который будет предоставлять HTML-содержимое для мини-приложения .
{
"type": "AdaptiveCard",
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.6",
"body": [],
"metadata":
{
"webUrl": "https://www.contoso.com/widgetprovider.html"
}
}
Обработка запросов ресурсов
Поставщики мини-приложений могут указать строку фильтра веб-запроса для мини-приложения в атрибуте WebRequestFilter элемента Definition в файле манифеста пакета поставщика. Когда содержимое мини-приложения запрашивает ресурс по URI, который соответствует фильтру, запрос будет перехвачен и перенаправлен на реализацию поставщика мини-приложений IWidgetResourceProvider.OnResourceRequested.
Шаблон фильтра задаётся в формате, который описан в шаблонах сопоставления. При необходимости строка фильтра в регистрации должна использовать Punycode. Все типы контента будут перенаправлены при сопоставлении, поэтому фильтр должен разрешаться только контенту, предназначенному для получения через IWidgetResourceProvider в приложении. Дополнительные сведения о формате манифеста пакета поставщика мини-приложений см. в формате XML манифеста пакета поставщика мини-приложений.
Для обработки запросов ресурсов поставщики мини-приложений должны реализовать интерфейс IWidgetResourceProvider .
internal class WidgetProvider : IWidgetProvider, IWidgetResourceProvider
В реализации метода OnResourceRequested поставщики мини-приложений могут предоставлять запрошенные ресурсы, задав свойству WidgetResourceRequestedArgs.Response объект WidgetResourceResponse , содержащий запрошенный ресурс. При асинхронном получении ресурса поставщик должен запросить отсрочку, вызвав WidgetResourceRequestedArgs.GetDeferral, а затем завершить ее, когда ресурс готов.
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();
}
Если поставщик не задает ответ на объект WidgetResourceRequestedArgs , переданный в метод, система получит ресурс из Интернета. В этом случае поставщик может изменить свойство Headers объекта WidgetResourceRequestedArgs.Request , например предоставить контекст пользователя или маркеры, и система будет использовать обновленные заголовки при получении ресурса из Интернета.
Обработка сообщений к веб-содержимому и от него
Чтобы получать строковые сообщения из содержимого мини-приложения, размещенного с помощью метода window.chrome.webview.postMessage JavaScript, поставщики мини-приложений могут реализовать интерфейс IWidgetProviderMessage и реализовать метод OnMessageReceived .
internal class WidgetProvider : IWidgetProvider, IWidgetProviderMessage
...
public void OnMessageReceived(WidgetMessageReceivedArgs args)
{
Console.WriteLine($"Message received from widget {args.WidgetContext.Id}: {args.Message}");
}
Поставщики мини-приложений могут отправлять сообщение в веб-содержимое мини-приложения, вызвав WidgetManager.SendMessage. Необходимо указать идентификатор мини-приложения, в который отправляется сообщение, которое является значением, указанным в атрибуте Id элемента Definition в файле манифеста пакета поставщика. Для получения дополнительной информации см. формат XML манифеста пакета поставщика виджетов. Строка сообщения может быть простым текстом или сериализованной формой объекта, интерпретированного веб-содержимым. Дополнительные сведения см. в статье PostWebMessageAsString.
var message = $"{{ \"current_location\": \"{ location }\" }}";
WidgetManager.GetDefault().SendMessageToContent("Weather_Widget", message);
Ограничения и требования
- Эта функция доступна только пользователям в Европейской экономической зоне (EEA). В странах ЕЭЗ установленные приложения, которые выступают в роли поставщика контентных лент, могут предоставлять ленты контента на Панели виджетов.
Windows developer