Вопрос по c#, webview, microsoft-metro – Загрузить локальный HTML-файл в приложение WebView Metro Style

10

У меня возникли некоторые проблемы при загрузке HTML-файла в элемент управления WebView в приложении в стиле metro. Я искал в Интернете и обнаружил, что вы не можете загрузить локальный html-файл методом NavigateTo. Я также обнаружил, что есть обходной путь, в котором вы можете использовать метод элемента управления NavigateToString. Ниже ссылка, где я видел это: http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/9cd8614d-2dc8-48ac-9cd9-57b03a644930

Кто-то в посте на эту тему привел пример того, как это можно сделать. Они использовали и байтовый массив, в который они помещают данные, полученные при вызове метода IInputstream.ReadAsync. Проблема, с которой я столкнулся, состоит в том, что после того, как я вызываю этот метод, массив байтов заполнен 0, что, я думаю, не является нормальным. Кто-нибудь может мне с этим помочь?

Ваш Ответ

3   ответа
3

У меня есть Html-файл в папке Assets, который называется 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));
        }
    }

и вуаля это должно работать.

17

Вы можете переключать контексты, используяms-appx-web:/// протокол вместоms-appx:///, который я успешно загружал локальные HTML-файлы и связанные CSS и JavaScript в приложении HTML / JS Metro Style.

Я не пробовал это в приложении XAML Metro Style, но считаю, чтоms-appx-web:/// протокол может быть использован. Ограничение состоит в том, что ваш HTML (если локальный, т.е. не размещен в Интернете) должен постоянно находитьсяwithin пакет WinRT, который, как представляется, в вашем случае, т. е. / активы.

Что делать, если html-файл находится "снаружи" пакет WinRT? Допустим, скажем, в & quot; Windows.Storage.ApplicationData.Current.LocalFolder & quot;
в Windows 8.1, когда я пытаюсь скопировать мой HTML-файл в папку ресурсов, я получаю отказано в доступе.
Я попробовал ваш ответ, и он сработал как шарм: D. Спасибо за помощь. Nashulmic
8

Я столкнулся с той же проблемой. В моем приложении у меня есть файл с именем Default.html, который читается, и его содержимое отображается в элементе управления WebView.

var html = await Windows.Storage.PathIO.ReadTextAsync("ms-appx:///Assets/Default.html");
MyWebView.NavigateToString(html);

Обратите внимание, что я используюawait а такжеReadTextAsync так, чтобы код был асинхронным (как следует делать при вводе-выводе), функция, которую вы помещаете в этот фрагмент, должна быть определена как асинхронная, пример:

private async void LoadWebView( file ) { ... }
Локально? нет: / К сожалению, в настоящее время элемент управления WebView не понимает протокол ms-appx, который необходим для этого. Это поток наMSDN об этом. У меня возникла та же проблема, и я прибег к тому, чтобы просто включить все CSS и JavaScript в HTML-файл, что далеко не идеально. Надеюсь, это будет решено в ближайшее время!
Спасибо за ответ. Действительно, ваше предложение сработало, но я бродил, есть ли способ загрузить файлы js и css, названные в заголовке html-страницы? Nashulmic

Похожие вопросы