2017-07-14 4 views
0

Ich versuche, eine lokale HTML-Seite in einer Webansicht mit Xamarin-Formularen zu laden. Ich benutze das grundlegende Beispiel in der Dev-Dokumentation, obwohl ich eine URL zum Laden bekommen kann Ich kann nicht meine eigenen HTML-Seiten laden. Dies muss nur über Android erfolgen, sodass Sie sich keine Sorgen um IOS und Windows machen müssen.Laden von lokalem HTML mit WebView Xamarin Forms

XAML:

<WebView 
    x:Name="webviewjava"></WebView> 

Der Code hinter:

public partial class javscriptExample : ContentPage 
{ 
    public interface IBaseUrl { string Get(); } 
    public javscriptExample() 
    { 
     InitializeComponent(); 
     var source = new HtmlWebViewSource(); 

     source.BaseUrl = DependencyService.Get<IBaseUrl>().Get(); 

     webviewjava.Source = source; 
    } 
} 

Die plattformspezifische Datei (LocalFile.cs): Just beachten dies als Android Asset gesetzt.

[assembly: Dependency(typeof(LocalFiles))] 
namespace maptesting.Droid 
{ 
    public class LocalFiles: IBaseUrl 
    { 
     public string Get() 
     { 
      return "file:///android_asset/"; 
     } 

    } 
} 

und unter dem Asset-Ordner gibt es eine "TestWebPage.html", auch als Android-Asset festgelegt.

Obwohl ich nicht weiß, was das Problem ist, habe ich es durch Debugging und die Basis-URL ist leer zurückkommen. Nur um klar zu sein, dass keine Datei nicht gefunden wird, ist der Bildschirm einfach leer. Auch, und ich bin nicht sicher, ob dies einen Unterschied macht. In der Datei LocalFiles.cs gibt es keine Syntaxhervorhebung für 'IBaseUrl'. Ich bin mir also nicht sicher, ob es es "sehen" kann.

Irgendwelche Ideen?

Antwort

0

WebView.BaseUrl sagt nur die WebView, wo Sie anfangen, nach Dateien zu suchen. Es ist der Stammordner der "Website". Standardmäßig laden Browser die Datei index.html, wenn Sie also Ihre Datei in index.html umbenennen, glaube ich, dass sie automatisch geladen werden sollte.

ich denke, das auch möglich sein sollte:

webviewjava.BaseUrl = DependencyService.Get<IBaseUrl>().Get(); 
webviewjava.Source = "TestWebPage.html"; 

Hier Sie sagen, „diesen Standort als Standard Platz für Dateien suchen verwenden“ und „diese Datei suchen und sie als Quelle verwendet für der HTML ".

+0

Danke, ich werde mir das anschauen – user3355961

0

Ich bin nicht sicher, ob das zählt, aber ich habe eine Arbeit gefunden. Anstatt die obige Route zu nehmen, habe ich einfach folgendes getan:

webviewjava.Source = "file:///android_asset/TestWebPage.html"; 

im Code hinter, und ließ gerade den IBaseUrl Aufruf insgesamt aus. Das funktioniert so, wie es soll.

+0

das zählt nicht, wie es funktionieren wird zu nur auf Android. Sie sollten wirklich einen Abhängigkeitsdienst erstellen und in jeder Implementierung eine passende Zeichenfolge zurückgeben. Für Android ist es "file: ///android_asset/TestWebPage.html", für IOS wird es etwas anderes sein –

+0

Es muss nur in Android funktionieren, das habe ich in der Frage gesagt. – user3355961

0

ich auch mit dem gleichen Problem leide, aber ich in der folgenden Weise gelöst

Use „UrlWebViewSource“ anstelle von „HtmlWebViewSource“

var urlSource = new UrlWebViewSource(); 

string url = DependencyService.Get<IWebViewBaseUrl>().GetBaseUrl(); 


      string TempUrl = Path.Combine(url, "imprint.html"); 
      urlSource.Url = TempUrl; 
WebBrowser.Source = urlSource;