2017-07-14 134 views
0

我想在Xamarin窗體的webview中加載本地HTML頁面。 我使用開發文檔中的基本示例,但我可以獲取要加載的URL我無法加載自己的HTML頁面。這隻需要通過Android來完成,因此不用擔心IOS和Windows。使用WebView加載本地HTML Xamarin Forms

XAML中:

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

的背後代碼:

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

平臺特定的文件(LocalFile.cs): 只是要注意這已被設置爲一個Android的資產。

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

    } 
} 

並且在資產的文件夾下還有一個'TestWebPage.html',也被設置爲Android資產。

雖然我不知道問題是什麼,我已經通過調試,基地網址回來空白。只是爲了清楚我沒有找到沒有找到的文件,屏幕只是空白。 此外,我不知道這是否有所作爲。在LocalFiles.cs文件中'IBaseUrl'上沒有語法高亮顯示。所以我不確定它是否能「看到」它。

任何想法?

回答

0

WebView.BaseUrl只告訴WebView從哪裏開始查找文件。這是「網站」的根文件夾。默認情況下,瀏覽器將加載文件index.html,所以如果您將文件重命名爲index.html,我相信它應該自動加載。

我想這應該是可能太:

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

在這裏,我們說「使用此位置作爲默認的地方去尋找文件」和「查找該文件並使用它作爲源HTML「。

+0

謝謝,我會看看這個 – user3355961

0

林不知道這是否重要,但我找到了解決辦法。而不是採取上述路線,我只是這樣做:

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

在後面的代碼,並剛剛離開了IBaseUrl打電話乾脆。 這工作正如它應該的。

+0

,因爲它去上班那不算解決只在Android上。你應該真的創建依賴項服務,並在每個實現中返回適當的字符串。對於android它是「文件:///android_asset/TestWebPage.html」,對於IOS它將是別的 –

+0

它只需要在Android中工作,我確實在這個問題中說過。 – user3355961

0

我也有同樣的問題的痛苦,但我以下列方式

使用「UrlWebViewSource」而不是「HtmlWebViewSource」

var urlSource = new UrlWebViewSource(); 

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


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