Загружать локальный файл 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 это должно работать.