Загружать локальный файл html в приложении WebView Metro Style
У меня возникли проблемы с загрузкой html файла в элементе управления WebView в приложении стиля метро.
Я искал в Интернете и узнал, что вы не можете загрузить локальный html файл с помощью метода NavigateTo. Я также обнаружил, что есть способ обхода, в котором вы можете использовать метод NavigateToString элемента управления. Ниже приведена ссылка, где я увидел это:
http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/9cd8614d-2dc8-48ac-9cd9-57b03a644930
Кто-то в сообщении на эту тему дал пример о том, как это можно сделать. Они использовали и массив байтов, в котором они помещали полученные данные из вызова метода IInputstream.ReadAsync. Проблема, с которой я столкнулся, заключается в том, что после того, как я вызываю этот метод, массив байтов заполнен 0, что я не думаю, что все в порядке. Может ли кто-нибудь помочь мне с этим?
Ответы
Ответ 1
Вы можете переключать контексты с помощью протокола ms-appx-web:///
вместо ms-appx:///
, который я успешно загрузил локальные файлы Html и связанные с ним CSS и JavaScript в приложении HTML/JS Metro Style.
Я не пробовал это в XAML Metro Style App, но считаю, что можно использовать протокол ms-appx-web:///
. Ограничение заключается в том, что ваш Html (если локальный, а не веб-хостинг) должен находиться в пакете WinRT, который, по-видимому, находится в вашем случае i.e./Assets.
Ответ 2
Я столкнулся с той же проблемой. В моем приложении у меня есть файл Default.html, который читается, и содержимое отображается в элементе управления WebView.
var html = await Windows.Storage.PathIO.ReadTextAsync("ms-appx:///Assets/Default.html");
MyWebView.NavigateToString(html);
Обратите внимание, что я использую await
и ReadTextAsync
так, чтобы код был асинхронным (как и при IO), функция, которую вы помещаете в это, должна быть определена как async, например:
private async void LoadWebView( file ) { ... }
Ответ 3
Вот быстрый пример, скажите мне, если это поможет вам:
У меня есть Html файл в моей папке "Активы" с именем MyHTMLPage, у него есть действие сборки содержимого типа и копирование на вывод для копирования всегда. Мой Html файл:
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<div style="background-color: chartreuse">HELLO WORLD, from a webview</div>
</body>
</html>
На моей главной странице .xaml:
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<WebView x:Name="MyWebView" Width="200" Height="300"></WebView>
</Grid>
На моей главной странице.:
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
Loaded += MainPage_Loaded;
}
private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
string src = "ms-appx-web:///Assets/MyHTMLPage.html";
this.MyWebView.Navigate(new Uri(src));
}
}
и Voila это должно работать.