uwp
WebView-Navigation
Suche…
Bemerkungen
Bei allen Beispielen, die Daten von einer Remote-URL abrufen, muss die Funktion "Internet (Client)" im Package.appxmanifest überprüft werden. Für Beispiele, die nur lokale Daten bearbeiten, ist dies nicht erforderlich.
Navigieren Sie zu Uri
Dieser Code navigiert in WebView einfach zu einigen Uri:
this.webView.Navigate(new Uri("http://stackoverflow.com/"));
oder
this.webView.Source = new Uri("http://stackoverflow.com/");
Navigieren Sie mit HttpRequestMessage
Legen Sie einen benutzerdefinierten Benutzeragenten fest und navigieren Sie zu 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);
Navigieren Sie zu String
Zeigt die angegebene HTML-Zeichenfolge in WebView an:
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);
Öffnen Sie die HTML-Datei aus dem App-Paket
Sie können eine Datei problemlos aus Ihrem App-Paket öffnen, aber das Uri-Schema muss "ms-appx-web" anstelle von "ms-appx" sein:
var uri = new Uri("ms-appx-web:///Assets/Html/html-sample.html");
this.webView.Navigate(uri);
Öffnen Sie die HTML-Datei über den lokalen Ordner der App oder den temporären Ordner
Um eine Datei aus einem lokalen Ordner oder einem temporären Ordner zu öffnen, darf sich die Zieldatei nicht im Stammverzeichnis dieser Ordner befinden. Um zu verhindern, dass andere Inhalte von WebView verfügbar gemacht werden, muss die anzuzeigende Datei aus Sicherheitsgründen in einem Unterordner gespeichert sein:
var uri = new Uri("ms-appdata:///local/html/html-sample.html");
this.webView.Navigate(uri);
NavigateToLocalStreamUri
Wenn NavigateToString einige Inhalte nicht verarbeiten kann, verwenden Sie die NavigateToLocalStreamUri-Methode. Dadurch wird jeder lokal referenzierte URI innerhalb der HTML-Seite dazu gezwungen, die spezielle Resolver-Klasse aufzurufen, die den richtigen Inhalt zur Verfügung stellen kann.
Datei Assets / Html / html-sample.html:
<!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);
}
}
Mit diesem Code wird die HTML-Seite aus dem App-Paket übernommen und der Inhalt aus dem lokalen Ordner darin eingebettet. Vorausgesetzt, Sie haben das Bild "cat.jpg" im Ordner "/ local / content", wird eine HTML-Seite mit einem Katzenbild angezeigt.