uwp
Navigazione WebView
Ricerca…
Osservazioni
Tutti gli esempi che prelevano i dati da un URL remoto, devono avere la funzionalità "Internet (client)" verificata nel Package.appxmanifest. Per esempi che manipolano solo dati locali non è necessario.
Vai a Uri
Questo codice naviga semplicemente su WebView su alcuni Uri:
this.webView.Navigate(new Uri("http://stackoverflow.com/"));
o
this.webView.Source = new Uri("http://stackoverflow.com/");
Navigare con HttpRequestMessage
Imposta un agente utente personalizzato e passa a 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);
Passare alla stringa
Mostra la stringa html specificata 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);
Apri il file HTML dal pacchetto dell'app
Puoi facilmente aprire un file dal pacchetto dell'app, ma lo schema Uri deve essere "ms-appx-web" anziché "ms-appx":
var uri = new Uri("ms-appx-web:///Assets/Html/html-sample.html");
this.webView.Navigate(uri);
Apri il file HTML dalla cartella locale dell'app o dalla cartella temporanea
Per aprire un file dalla cartella locale o dalla cartella temporanea, il file di destinazione non deve trovarsi nella radice di tali cartelle. Per motivi di sicurezza, per evitare che altri contenuti vengano esposti da WebView, il file destinato alla visualizzazione deve trovarsi in una sottocartella:
var uri = new Uri("ms-appdata:///local/html/html-sample.html");
this.webView.Navigate(uri);
NavigateToLocalStreamUri
Nel caso in cui NavigateToString non possa gestire alcuni contenuti, utilizzare il metodo NavigateToLocalStreamUri. Forzerà ogni URI referenziato localmente all'interno della pagina HTML per chiamare la speciale classe resolver, che può fornire il contenuto giusto al volo.
File 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>
Codice:
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);
}
}
Questo codice prenderà la pagina HTML dal pacchetto dell'app e incorporerà il contenuto dalla cartella locale al suo interno. A condizione che tu abbia un'immagine "cat.jpg" nella cartella / local / content, mostrerà la pagina HTML con l'immagine cat.