我正在尝试使用Xamarin表单在Webview中加载本地HTML页面。 我正在使用开发文档中的基本示例,虽然我可以获取加载的URL,但我无法加载自己的HTML页面。这只需要通过Android完成,所以不用担心IOS和Windows。
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/";
}
}
}
并在资源的文件夹下有一个&#39; TestWebPage.html&#39;,也设置为Android资产。
虽然我不知道问题是什么,但我已经通过调试,基本网址又回来了。为了清楚我没有找到一个未找到的文件,屏幕只是空白。 此外,我不确定这是否有所作为。 &#39; IBaseUrl&#39;没有语法突出显示。在LocalFiles.cs文件中。所以我不确定它是否可以看到&#39;它
有什么想法吗?
答案 0 :(得分:6)
我也遇到了同样的问题,但我以下列方式解决了
使用&#34; UrlWebViewSource&#34;而不是&#34; HtmlWebViewSource&#34;
var urlSource = new UrlWebViewSource();
string url = DependencyService.Get<IWebViewBaseUrl>().GetBaseUrl();
string TempUrl = Path.Combine(url, "imprint.html");
urlSource.Url = TempUrl;
WebBrowser.Source = urlSource;
答案 1 :(得分:1)
WebView.BaseUrl
只告诉WebView
从哪里开始查找文件。它是&#34;网站&#34;的根文件夹。默认情况下,浏览器会加载文件index.html
,因此如果您将文件重命名为index.html
,我认为它应该自动加载。
我认为这也应该是可能的:
webviewjava.BaseUrl = DependencyService.Get<IBaseUrl>().Get();
webviewjava.Source = "TestWebPage.html";
在这里,你说&#34;使用此位置作为查找文件的默认位置&#34;和&#34;查找此文件并将其用作HTML&#34;。
的来源答案 2 :(得分:1)
您必须检查Build Action = BundleResource的文件属性
尝试使用此代码加载本地html文件
var source = new HtmlWebViewSource();
string url = DependencyService.Get<IBaseUrl>().GetBaseUrl();
string TempUrl = Path.Combine(url, "terms.html");
source.BaseUrl = url;
string html;
try
{
using (var sr = new StreamReader(TempUrl))
{
html = sr.ReadToEnd();
source.Html = html;
}
}
catch(Exception ex){
Console.WriteLine(ex.Message);
}
然后必须提供每个平台的界面实现
iOS
[assembly: Dependency(typeof(BaseUrl))]
namespace yournamespace
{
public class BaseUrl: IBaseUrl
{
public string GetBaseUrl()
{
return NSBundle.MainBundle.BundlePath;
}
}
}
Android
[assembly: Dependency (typeof(BaseUrl))]
namespace yournamespace {
public class BaseUrl_Android : IBaseUrl {
public string Get() {
return "file:///android_asset/";
}
}
}
答案 3 :(得分:0)
我不确定这是否重要,但我找到了解决方法。我没有采取上述途径,而是采取了以下措施:
webviewjava.Source = "file:///android_asset/TestWebPage.html";
在后面的代码中,完全省略了IBaseUrl调用。 这就像它应该的那样。
答案 4 :(得分:0)
这是一篇过时的文章,但它可能会帮助希望仅使用一个HTML文件使用Android,iOS和UWP实现的人。使用这种方法,您只需要在所有平台上使用一个HTML文件即可。