WebView.NavigateToLocalStreamUri(Uri, IUriToStreamResolver) Methode

Definition

Lädt lokale Webinhalte am angegebenen URI mithilfe eines IUriToStreamResolvers.

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)

Parameter

source
Uri Uri

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

streamResolver
IUriToStreamResolver

Ein Resolver, der den URI in einen zu ladenden Stream konvertiert.

Windows-Anforderungen

App-Funktionen
enterpriseCloudSSO

Beispiele

Das folgende Codebeispiel zeigt, wie Sie einen Resolver erstellen und verwenden, der eine Datei aus dem App-Paket bereitstellt. Ein vollständiges Beispiel finden Sie im Xaml-WebView-Steuerelementbeispiel.

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

Hinweise

Verwenden Sie diese Methode, um lokale Inhalte zu laden, die von der NavigateToString-Methode nicht verarbeitet werden. NavigateToString bietet eine einfache Möglichkeit, zu statischen HTML-Inhalten zu navigieren, einschließlich Inhalten mit Verweisen auf Ressourcen wie CSS, Skripts, Bilder und Schriftarten. NavigateToString bietet jedoch keine Möglichkeit, diese Ressourcen programmgesteuert zu generieren.

Um die NavigateToLocalStreamUri-Methode zu verwenden, müssen Sie eine IUriToStreamResolver-Implementierung übergeben, die ein URI-Muster in einen Inhaltsdatenstrom übersetzt. Sie können dies tun, um den Inhalt für alle Ressourcen anzugeben, die von einer Webseite oder einer Reihe von Seiten verwendet werden. Mit dieser Methode können Sie beispielsweise Inhalte anzeigen, die im lokalen Dateisystem als verschlüsselte Dateien oder in CAB-Paketen gespeichert sind. Wenn der Inhalt angefordert wird, können Sie eine IUriToStreamResolver-Implementierung verwenden, um ihn direkt zu entschlüsseln.

Die IUriToStreamResolver-Schnittstelle verfügt über eine Methode, UriToStreamAsync , die den URI akzeptiert und den Stream zurückgibt. Der URI hat die Form "ms-local-stream://appname_KEY/folder/file", wobei KEY den Resolver identifiziert. Verwenden Sie BuildLocalStreamUri , um einen URI im richtigen Format zu erstellen, der auf den zu ladenden lokalen Inhalt verweist.

Hinweis

Ihre IUriToStreamResolver-Implementierung muss agil sein, um einen Deadlock zu verhindern, der auftreten kann, wenn der UI-Thread darauf wartet, dass der IUriToStreamResolver seine Arbeit beendet, bevor er fortfährt. Weitere Informationen finden Sie unter Threading und Marshalling.

Wenn die App über diese enterpriseCloudSSO Funktion verfügt, können im WebView-Steuerelement gehostete Webseiten einmaliges Anmelden mit Azure Active Directory-Ressourcen (AAD) verwenden.

Gilt für:

Weitere Informationen