WebView.NavigateToLocalStreamUri Method

Lädt lokalen Webinhalt am angegebenen URI mit IUriToStreamResolver.

Syntax


public void NavigateToLocalStreamUri(
  Uri source, 
  IUriToStreamResolver streamResolver
)

Parameter

source

Typ: System.Uri [.NET] | Windows::Foundation::Uri [C++]

Ein URI, der den zu ladenden lokalen HTML-Inhalt identifiziert.

streamResolver

Typ: IUriToStreamResolver

Ein Resolver, der den URI in einen ladbaren Stream konvertiert.

Hinweise

Verwenden Sie diese Methode, um lokale Inhalte zu laden, die mit der NavigateToString-Methode nicht behandelt werden. NavigateToString bietet eine einfache Möglichkeit, zu statischen HTML-Inhalten zu navigieren. Dazu zählen auch Inhalte mit Verweisen auf Ressourcen wie CSS, Skripts, Bilder und Schriftarten. NavigateToString bietet jedoch keine Möglichkeit, diese Ressourcen programmgesteuert zu generieren.

Zur Verwendung der NavigateToLocalStreamUri-Methode müssen Sie eine Implementierung von IUriToStreamResolver übergeben, die ein URI-Muster in einen Inhaltsstream übersetzt. So können Sie die Inhalte für alle Ressourcen zur Verfügung stellen, die von einer Webseite oder eine Reihe von Seiten verwendet werden. Sie können diese Methode beispielsweise verwenden, um Inhalte anzuzeigen, die im lokalen Dateisystem als verschlüsselte Dateien oder in CAB-Paketen gespeichert sind. Wenn die Inhalte angefordert werden, können Sie eine IUriToStreamResolver-Implementierung verwenden, um sie direkt zu entschlüsseln.

Die IUriToStreamResolver-Schnittstelle verfügt über eine Methode, UriToStreamAsync, die den URI als Parameter übernimmt und den Stream zurückgibt. Der URI wird in der Form "ms-local-stream://App-Name_KEY/Ordner/Datei" angegeben, wobei KEY den Resolver angibt. Verwenden Sie BuildLocalStreamUri, um einen URI im richtigen Format zu erstellen, der auf den zu ladenden lokalen Inhalt verweist.

Hinweis  Die IUriToStreamResolver-Implementierung muss agil sein, um einen Deadlock zu verhindern. Dieser kann auftreten, wenn der UI-Thread darauf wartet, dass die Ausführung von IUriToStreamResolver abgeschlossen wird, bevor er weiter ausgeführt wird. Weitere Informationen finden Sie unter Threading und Marshalling.

Beispiele

Das folgende Codebeispiel zeigt, wie ein Resolver erstellt und verwendet wird, der eine Datei aus dem App-Paket bereitstellt. Ein vollständiges Beispiel finden Sie im Beispiel für ein XAML-WebView-Steuerelement.



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


Anforderungen

Mindestens unterstützter Client

Windows 8.1

Mindestens unterstützter Server

Windows Server 2012 R2

Namespace

Windows.UI.Xaml.Controls
Windows::UI::Xaml::Controls [C++]

Metadaten

Windows.winmd

Siehe auch

WebView
IUriToStreamResolver
BuildLocalStreamUri
Beispiel für ein XAML-WebView-Steuerelement

 

 

Anzeigen:
© 2014 Microsoft