Condividi tramite


WebView.NavigateToLocalStreamUri(Uri, IUriToStreamResolver) Metodo

Definizione

Carica contenuto Web locale nell'URI specificato usando un 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)

Parametri

source
Uri Uri

URI che identifica il contenuto HTML locale da caricare.

streamResolver
IUriToStreamResolver

Resolver che converte l'URI in un flusso da caricare.

Requisiti Windows

Funzionalità dell'app
enterpriseCloudSSO

Esempio

Nell'esempio di codice seguente viene illustrato come creare e usare un resolver che serve un file dal pacchetto dell'app. Per un esempio completo, vedere l'esempio di controllo 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"); }
    }
}

Commenti

Usare questo metodo per caricare il contenuto locale che il metodo NavigateToString non gestirà. NavigateToString offre un modo semplice per passare al contenuto HTML statico, incluso il contenuto con riferimenti alle risorse, ad esempio CSS, script, immagini e tipi di carattere. Tuttavia, NavigateToString non fornisce un modo per generare queste risorse a livello di codice.

Per usare il metodo NavigateToLocalStreamUri, è necessario passare un'implementazione IUriToStreamResolver che converte un modello URI in un flusso di contenuto. È possibile eseguire questa operazione per fornire il contenuto per tutte le risorse usate da una pagina Web o da una serie di pagine. Ad esempio, è possibile usare questo metodo per visualizzare il contenuto salvato nel file system locale come file crittografati o nei pacchetti cab. Quando viene richiesto il contenuto, è possibile usare un'implementazione IUriToStreamResolver per decrittografarla al volo.

L'interfaccia IUriToStreamResolver include un metodo, UriToStreamAsync che accetta l'URI e restituisce il flusso. L'URI è sotto forma di "ms-local-stream://appname_KEY/folder/file" in cui KEY identifica il resolver. Usare BuildLocalStreamUri per creare un URI nel formato corretto che fa riferimento al contenuto locale da caricare.

Nota

L'implementazione di IUriToStreamResolver deve essere agile per impedire il deadlock che può verificarsi quando il thread dell'interfaccia utente attende il completamento del lavoro di IUriToStreamResolver prima di continuare. Per altre informazioni, vedere Threading and Marshalling

Se l'app possiede la enterpriseCloudSSO funzionalità, le pagine Web ospitate all'interno del controllo WebView possono usare l'accesso Single Sign-On con le risorse di Azure Active Directory (AAD).

Si applica a

Vedi anche