2012-05-21 4 views
10

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

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

ответ

17

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

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

+0

Я дал ваш ответ попробовать, и это сработало как шарм: D. Спасибо за помощь. – Nashulmic

+4

Что делать, если html-файл «снаружи» пакета WinRT? Скажем, в «Windows.Storage.ApplicationData.Current.LocalFolder» – Erick

+0

в Windows 8.1. Когда я пытаюсь скопировать мой html-файл в папку с ресурсами, я получаю Acces Denied. –

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) { ... } 
+0

благодарит за ответ. Действительно, ваше предложение сработало, но я блуждал, есть ли способ загрузить файлы js и css, называемые заголовком html-страницы? – Nashulmic

+1

Локально? no:/К сожалению, в это время элемент управления WebView не понимает протокол ms-appx, который необходим для этого. Threre - это поток на [MSDN] (http://social.msdn.microsoft.com/Forums/en/winappswithcsharp/thread/3e759487-ea22-4ea6-8096-ff013fb099fd) об этом. У меня такая же проблема, и я просто включил все CSS и JavaScript в HTML-файл, который не идеален. Надеюсь, это скоро будет решено! –

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> 

На моем главном Page.xaml:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
     <WebView x:Name="MyWebView" Width="200" Height="300"></WebView> 
    </Grid> 

На моем главном Page.cs:

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 это должно работать.

Смежные вопросы