uwp
WebView-navigatie
Zoeken…
Opmerkingen
Alle voorbeelden die gegevens van een externe URL ophalen, moeten de mogelijkheid "Internet (client)" hebben aangevinkt in het Package.appxmanifest. Voor voorbeelden die alleen lokale gegevens manipuleren, is dit niet nodig.
Navigeer naar Uri
Deze code navigeert eenvoudigweg WebView naar een aantal Uri:
this.webView.Navigate(new Uri("http://stackoverflow.com/"));
of
this.webView.Source = new Uri("http://stackoverflow.com/");
Navigeer met HttpRequestMessage
Stel een aangepaste user-agent in en ga naar Uri:
var userAgent = "my custom user agent";
var uri = new Uri("http://useragentstring.com/");
var requestMessage = new HttpRequestMessage(HttpMethod.Get, uri);
requestMessage.Headers.Add("User-Agent", userAgent);
this.webView.NavigateWithHttpRequestMessage(requestMessage);
Navigeer naar string
Toon gespecificeerde HTML-string in WebView:
var htmlString =
@"<!DOCTYPE html>
<html>
<head><title>HTML document</title></head>
<body>
<p>This is simple HTML content.</p>
</body>
</html>";
this.webView.NavigateToString(htmlString);
Open HTML-bestand van app-pakket
U kunt eenvoudig een bestand vanuit uw app-pakket openen, maar het Uri-schema moet "ms-appx-web" zijn in plaats van "ms-appx":
var uri = new Uri("ms-appx-web:///Assets/Html/html-sample.html");
this.webView.Navigate(uri);
Open HTML-bestand vanuit app lokale map of tijdelijke map
Als u een bestand uit de lokale map of tijdelijke map wilt openen, mag het doelbestand zich niet in de hoofdmap van die mappen bevinden. Om veiligheidsredenen, om te voorkomen dat andere inhoud wordt weergegeven door WebView, moet het bestand dat wordt weergegeven, zich in een submap bevinden:
var uri = new Uri("ms-appdata:///local/html/html-sample.html");
this.webView.Navigate(uri);
NavigateToLocalStreamUri
In het geval dat NavigateToString sommige inhoud niet aankan, gebruik dan de methode NavigateToLocalStreamUri. Het zal elke lokaal gerefereerde URI binnen de HTML-pagina dwingen om de speciale resolverklasse aan te roepen, die meteen de juiste inhoud kan bieden.
Activa / Html / html-sample.html bestand:
<!DOCTYPE html>
<html>
<head>
<title>HTML document</title>
</head>
<body>
<p>This is simple HTML content.</p>
<img src="cat.jpg"/>
</body>
</html>
Code:
protected override void OnNavigatedTo(NavigationEventArgs args)
{
// The Uri resolver takes is in the form of "ms-local-stream://appname_KEY/folder/file"
// For simplicity, there is method BuildLocalStreamUri which returns correct Uri.
var uri = this.webView.BuildLocalStreamUri("SomeTag", "/html-sample.html");
var resolver = new StreamUriResolver();
this.webView.NavigateToLocalStreamUri(uri, resolver);
base.OnNavigatedTo(args);
}
public sealed class StreamUriResolver : IUriToStreamResolver
{
public IAsyncOperation<IInputStream> UriToStreamAsync(Uri uri)
{
if (uri == null)
{
throw new ArgumentNullException(nameof(uri));
}
var path = uri.AbsolutePath;
return GetContent(path).AsAsyncOperation();
}
private async Task<IInputStream> GetContent(string uriPath)
{
Uri localUri;
if (Path.GetExtension(uriPath).Equals(".html"))
{
localUri = new Uri("ms-appx:///Assets/Html" + uriPath);
}
else
{
localUri = new Uri("ms-appdata:///local/content" + uriPath);
}
var file = await StorageFile.GetFileFromApplicationUriAsync(localUri);
var stream = await file.OpenAsync(FileAccessMode.Read);
return stream.GetInputStreamAt(0);
}
}
Deze code haalt de HTML-pagina uit het app-pakket en sluit inhoud uit de lokale map in. Op voorwaarde dat u afbeelding "cat.jpg" in de map / local / content hebt, wordt een HTML-pagina met kattenafbeelding weergegeven.