uwp
Navigation WebView
Recherche…
Remarques
Tous les exemples qui récupèrent des données à partir d'une URL distante doivent avoir la capacité "Internet (client)" vérifiée dans le package.appxmanifest. Pour des exemples ne manipulant que des données locales, cela n'est pas nécessaire.
Naviguer vers Uri
Ce code navigue simplement WebView vers certains Uri:
this.webView.Navigate(new Uri("http://stackoverflow.com/"));
ou
this.webView.Source = new Uri("http://stackoverflow.com/");
Naviguer avec HttpRequestMessage
Définissez l'agent utilisateur personnalisé et accédez à 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);
Naviguer vers la chaîne
Afficher la chaîne html spécifiée dans 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);
Ouvrir le fichier HTML à partir du package d'application
Vous pouvez facilement ouvrir un fichier à partir de votre package d'application, mais le schéma Uri doit être "ms-appx-web" au lieu de "ms-appx":
var uri = new Uri("ms-appx-web:///Assets/Html/html-sample.html");
this.webView.Navigate(uri);
Ouvrir le fichier HTML du dossier local de l'application ou du dossier temporaire
Pour ouvrir un fichier à partir du dossier local ou du dossier temporaire, le fichier cible ne doit pas se trouver dans la racine de ces dossiers. Pour des raisons de sécurité, pour éviter que d'autres contenus ne soient exposés par WebView, le fichier destiné à être affiché doit se trouver dans un sous-dossier:
var uri = new Uri("ms-appdata:///local/html/html-sample.html");
this.webView.Navigate(uri);
NavigateToLocalStreamUri
Si NavigateToString ne peut pas gérer certains contenus, utilisez la méthode NavigateToLocalStreamUri. Il forcera chaque URI référencé localement dans la page HTML à appeler la classe de résolveur spéciale, qui peut fournir un contenu correct à la volée.
Fichier 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);
}
}
Ce code prendra la page HTML du package de l'application et incorporera le contenu du dossier local dans celui-ci. Si vous avez l'image "cat.jpg" dans le dossier / local / content, la page HTML avec l'image du chat apparaîtra.