2012-05-21 18 views
10

Tengo problemas para cargar un archivo html en un control WebView en una aplicación de estilo metro. He estado buscando en Internet y descubrí que no puedes cargar un archivo html local con el método NavigateTo. También descubrí que hay una solución alternativa en la que puede usar el método NavigateToString del control. Debajo está el enlace donde vi esto: http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/9cd8614d-2dc8-48ac-9cd9-57b03a644930Cargar archivo html local en la aplicación WebView Metro Style

Alguien en una publicación sobre ese tema dio un ejemplo de cómo se podría hacer esto. Utilizaron una matriz de bytes en la que colocaron los datos que obtuvieron al llamar al método IInputstream.ReadAsync. El problema con el que me he encontrado es que después de llamar a ese método, la matriz de bytes está llena de 0, lo que no creo que esté bien. ¿Alguien puede ayudarme con esto?

Respuesta

17

Puede cambiar contextos utilizando el protocolo ms-appx-web:/// en lugar de ms-appx:///, que he tenido éxito al cargar archivos Html locales y CSS y JavaScript asociados, dentro de una aplicación HTML/JS Metro Style.

No he intentado esto en una aplicación XAML Metro Style, pero creo que se puede usar el protocolo ms-appx-web:///. La limitación es que su Html (si es local, es decir, no alojado en la web) tiene que residir dentro de un paquete WinRT, que aparece en su caso, es decir,/Assets.

+0

He probado tu respuesta y funcionó a las mil maravillas: D. Gracias por la ayuda. – Nashulmic

+4

¿Qué pasa si el archivo html está "fuera" del paquete WinRT? Digamos dentro de "Windows.Storage.ApplicationData.Current.LocalFolder" – Erick

+0

en Windows 8.1, cuando trato de copiar mi archivo html a la carpeta de activos, obtengo un acceso denegado. –

8

Me encontré con el mismo problema. En mi aplicación, tengo un archivo llamado Default.html que se lee y sus contenidos se muestran en un control WebView.

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

Tenga en cuenta que estoy usando await y ReadTextAsync para que el código es asíncrona (como debe cuando se hace IO), la función de colocar esta cortó debe ser definida como asíncrona, ejemplo:

private async void LoadWebView(file) { ... } 
+0

gracias por la respuesta. De hecho, su sugerencia funcionó, pero estaba vagando, ¿hay alguna forma de cargar los archivos js y css llamados en el encabezado de la página html? – Nashulmic

+1

¿Localmente? no:/Desafortunadamente en este momento, el control WebView no comprende el protocolo ms-appx, que es lo que se necesita para hacer esto. Threre está en proceso en [MSDN] (http://social.msdn.microsoft.com/Forums/en/winappswithcsharp/thread/3e759487-ea22-4ea6-8096-ff013fb099fd) sobre esto. Tengo el mismo problema y recurrí a simplemente incluir todos los css y JavaScript en el archivo HTML, que es menos que ideal. ¡Espero que esto se resuelva pronto! –

3

Aquí está una muestra rápida dime si esto ayuda que:

que tiene un archivo HTML en mis Activos carpeta llamada MyHTMLPage, que tiene una acción de construcción de tipo de contenido y una copia a la salida copiar siempre. Mi archivo 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> 

En mi Page.xaml principal:

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

En mi Page.cs principal:

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)); 
     } 
    } 

y listo esto debería funcionar.

Cuestiones relacionadas