Partilhar via


WebView.NavigateToLocalStreamUri(Uri, IUriToStreamResolver) Método

Definição

Carrega o conteúdo da Web local no URI especificado usando um 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)

Parâmetros

source
Uri Uri

Um URI que identifica o conteúdo HTML local a ser carregado.

streamResolver
IUriToStreamResolver

Um resolvedor que converte o URI em um fluxo a ser carregado.

Requisitos do Windows

Funcionalidades do aplicativo
enterpriseCloudSSO

Exemplos

O exemplo de código a seguir mostra como criar e usar um resolvedor que fornecerá um arquivo do pacote do aplicativo. Para obter um exemplo completo, consulte o exemplo de controle WebView XAML.

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

Comentários

Use esse método para carregar o conteúdo local que o método NavigateToString não manipulará. NavigateToString fornece uma maneira fácil de navegar até conteúdo HTML estático, incluindo conteúdo com referências a recursos como CSS, scripts, imagens e fontes. No entanto, NavigateToString não fornece uma maneira de gerar esses recursos programaticamente.

Para usar o método NavigateToLocalStreamUri, você deve passar uma implementação IUriToStreamResolver que traduz um padrão de URI em um fluxo de conteúdo. Você pode fazer isso para fornecer o conteúdo de todos os recursos usados por uma página da Web ou uma série de páginas. Por exemplo, você pode usar esse método para exibir o conteúdo salvo no sistema de arquivos local como arquivos criptografados ou em pacotes cab. Quando o conteúdo é solicitado, você pode usar uma implementação IUriToStreamResolver para descriptografá-lo em tempo real.

A interface IUriToStreamResolver tem um método, UriToStreamAsync , que usa o URI e retorna o fluxo. O URI está na forma de "ms-local-stream://appname_KEY/folder/file" em que KEY identifica o resolvedor. Use BuildLocalStreamUri para criar um URI no formato correto que referencie o conteúdo local a ser carregado.

Observação

Sua implementação de IUriToStreamResolver deve ser ágil para evitar deadlock que pode ocorrer quando o thread de interface do usuário aguarda que o IUriToStreamResolver conclua seu trabalho antes de continuar. Para obter mais informações, consulte Threading e Marshaling

Se o aplicativo possuir a enterpriseCloudSSO funcionalidade, as páginas da Web hospedadas dentro do controle WebView poderão usar o logon único com recursos do AAD (Azure Active Directory).

Aplica-se a

Confira também