2012-05-21 7 views
10

Ich habe ein bisschen Probleme beim Laden einer HTML-Datei in einem WebView-Steuerelement in einer Metro-App. Ich habe im Internet gesucht und festgestellt, dass Sie keine lokale HTML-Datei mit der NavigateTo-Methode laden können. Ich habe auch herausgefunden, dass es eine Problemumgehung gibt, in der Sie die NavigateToString-Methode des Steuerelements verwenden können. Unten ist der Link, wo ich das sah: http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/9cd8614d-2dc8-48ac-9cd9-57b03a644930Lokale HTML-Datei laden in WebView Metro Style App

Jemand in einem Beitrag zu diesem Thema gab ein Beispiel, wie dies getan werden könnte. Sie verwendeten und ein Byte-Array, in dem sie die Daten, die sie erhalten hatten, beim Aufruf der IInputstream.ReadAsync-Methode verwendeten. Das Problem, das ich habe, ist, dass, nachdem ich diese Methode aufgerufen habe, das Byte-Array voll von Nullen ist, was ich nicht für in Ordnung halte. Kann mir jemand dabei helfen?

Antwort

17

Sie können Kontexte wechseln, indem Sie das Protokoll ms-appx-web:/// anstelle von ms-appx:/// verwenden, das erfolgreich lokale HTML-Dateien und das zugehörige CSS und JavaScript in einer HTML/JS Metro Style App geladen hat.

Ich habe dies nicht in einer XAML Metro Style App versucht, aber glaube, dass das ms-appx-web:/// Protokoll verwendet werden kann. Die Einschränkung ist, dass Ihr Html (wenn lokal, d. H. Nicht Web-gehostet) innerhalb von ein WinRT-Paket, das es in Ihrem Fall scheint, d. H./Assets.

+0

Ich habe deine Antwort versucht und es hat funktioniert wie ein Charme: D. Danke für die Hilfe. – Nashulmic

+4

Was ist, wenn die HTML-Datei "außerhalb" des WinRT-Pakets liegt? Lassen Sie uns innerhalb von "Windows.Storage.ApplicationData.Current.LocalFolder" – Erick

+0

in Windows 8.1 sagen, wenn ich versuche, meine HTML-Datei in den Ordner Assets zu kopieren, bekomme ich einen Zugriff verweigert. –

8

Ich lief auf das gleiche Problem. In meiner Anwendung habe ich eine Datei namens Default.html, die gelesen wird und deren Inhalt in einem WebView-Steuerelement angezeigt wird.

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

Bitte beachte, dass ich verwende await und ReadTextAsync so dass der Code asynchron ist (wie sollte man, wenn IO tun), die Funktion, die Sie dies es snipped platzieren müssen async, Beispiel definiert werden:

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

danke für die antwort. In der Tat hat Ihr Vorschlag funktioniert, aber ich war am Wandern, gibt es eine Möglichkeit, die js und CSS-Dateien, die in der HTML-Seitenkopfzeile aufgerufen werden, zu laden? – Nashulmic

+1

Lokal? no:/Leider erkennt das WebView-Steuerelement zu diesem Zeitpunkt das ms-appx-Protokoll nicht, was dazu benötigt wird. Threere ist ein Thread über auf [MSDN] (http://social.msdn.microsoft.com/Forums/en/winappswithcsharp/thread/3e759487-ea22-4ea6-8096-ff013fb099fd) darüber. Ich habe das gleiche Problem und habe nur CSS und JavaScript in die HTML-Datei aufgenommen, was alles andere als ideal ist. Hoffentlich wird das bald gelöst! –

3

Hier ist eine schnelle Probe mir sagen, ob diese Hilfe Sie:

ich eine HTML-Datei in meinem Assets habe Ordner MyHTMLPage, es hat eine Build Aktion vom Typ Inhalt und eine Kopie an Output Kopieren Sie immer genannt. Meine HTML-Datei:

<!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> 

Auf meinem Haupt Page.xaml:

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

Auf meinem Haupt 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)); 
     } 
    } 

und Voila sollte diese Arbeit.

Verwandte Themen