Поделиться через


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)

Параметры

source
Uri Uri

Универсальный код ресурса (URI), определяющий загружаемое локальное содержимое HTML.

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).

Применяется к

См. также раздел