WebView.NavigateToLocalStreamUri(Uri, IUriToStreamResolver) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Загружает локальное веб-содержимое по указанному URI с помощью IUriToStreamResolver.
public:
virtual void NavigateToLocalStreamUri(Uri ^ source, IUriToStreamResolver ^ streamResolver) = NavigateToLocalStreamUri;
void NavigateToLocalStreamUri(Uri const& source, IUriToStreamResolver const& streamResolver);
public void NavigateToLocalStreamUri(System.Uri source, IUriToStreamResolver streamResolver);
function navigateToLocalStreamUri(source, streamResolver)
Public Sub NavigateToLocalStreamUri (source As Uri, streamResolver As IUriToStreamResolver)
Параметры
- streamResolver
- IUriToStreamResolver
Сопоставитель, преобразующий URI в поток для загрузки.
Требования к Windows
Возможности приложения |
enterpriseCloudSSO
|
Примеры
В следующем примере кода показано, как создать и использовать сопоставитель, который будет обслуживать файл из пакета приложения. Полный пример см. в примере элемента управления XAML WebView.
public sealed partial class TestPage : Page
{
// ... other code ...
protected override void OnNavigatedTo(NavigationEventArgs e)
{
// The 'Host' part of the URI for the ms-local-stream protocol needs to be a combination of the package name
// and an application-defined key, which identifies the specific resolver, in this case 'MyTag'.
Uri url = webView4.BuildLocalStreamUri("MyTag","/Minesweeper/default.html");
StreamUriWinRTResolver myResolver = new StreamUriWinRTResolver();
// Pass the resolver object to the navigate call.
webView4.NavigateToLocalStreamUri(url, myResolver);
}
}
public sealed class StreamUriWinRTResolver : IUriToStreamResolver
{
public IAsyncOperation<IInputStream> UriToStreamAsync(Uri uri)
{
if (uri == null)
{
throw new Exception();
}
string path = uri.AbsolutePath;
// Because of the signature of the this method, it can't use await, so we
// call into a separate helper method that can use the C# await pattern.
return GetContent(path).AsAsyncOperation();
}
private async Task<IInputStream> GetContent(string path)
{
// We use a package folder as the source, but the same principle should apply
// when supplying content from other locations
try
{
Uri localUri= new Uri("ms-appx:///html" + path);
StorageFile f = await StorageFile.GetFileFromApplicationUriAsync(localUri);
IRandomAccessStream stream = await f.OpenAsync(FileAccessMode.Read);
return stream;
}
catch (Exception) { throw new Exception("Invalid path"); }
}
}
Комментарии
Используйте этот метод для загрузки локального содержимого, которое не будет обрабатываться методом NavigateToString . NavigateToString предоставляет простой способ перехода к статичному HTML-содержимому, включая содержимое со ссылками на такие ресурсы, как CSS, скрипты, изображения и шрифты. Однако NavigateToString не предоставляет способ создания этих ресурсов программным способом.
Чтобы использовать метод NavigateToLocalStreamUri, необходимо передать реализацию IUriToStreamResolver , которая преобразует шаблон URI в поток содержимого. Это можно сделать, чтобы предоставить содержимое для всех ресурсов, используемых веб-страницей или серией страниц. Например, этот метод можно использовать для отображения содержимого, сохраненного в локальной файловой системе в виде зашифрованных файлов или в cab-пакетах. При запросе содержимого можно использовать реализацию IUriToStreamResolver для его расшифровки в режиме реального времени.
Интерфейс IUriToStreamResolver имеет один метод UriToStreamAsync , который принимает URI и возвращает поток. Универсальный код ресурса (URI) имеет вид ms-local-stream://appname_KEY/folder/file, где KEY идентифицирует сопоставитель. Используйте BuildLocalStreamUri , чтобы создать универсальный код ресурса (URI) в правильном формате, который ссылается на загружаемое локальное содержимое.
Примечание
Реализация IUriToStreamResolver должна быть гибкой, чтобы предотвратить взаимоблокировку, которая может возникнуть, когда поток пользовательского интерфейса ожидает завершения работы IUriToStreamResolver , прежде чем продолжить. Дополнительные сведения см. в разделе Потоки и маршалинг.
Если приложение обладает enterpriseCloudSSO
этой возможностью, веб-страницы, размещенные в элементе управления WebView, могут использовать единый вход с ресурсами Azure Active Directory (AAD).