我正在尝试使用WebView
来显示一些自定义生成的html,该html试图显示包含在资产中的图像。
目前,我只想让此功能在Android系统中起作用。 (在UWP头中,我正在使用RichTextBlock
完成相同的操作。但是控件InlineUIContainer
在Uno中尚不可用。)
在Android头中,我已将这些图像的“构建操作”设置为AndroidAsset
(图像位于目录Assets
中)
我尝试通过以下方式(当场生成的html)引用这些图像:
<img src="imgName.png" />
<img src="ms-appdata:///imgName.png" />
<img src="ms-appdata:///local/imgName.png" />
<img src="file:///imgName.png" />
这些都不起作用。
我还尝试将html写入本地文件(而不是使用NavigateToString
)并导航到该文件,但无济于事。
根据“ Google”,在Xamarin中使用其WebView
的方法是使用LoadDataWithBaseUrl(null, ...)
,但是该方法在UWP / Uno的WebView中不可用...
答案 0 :(得分:0)
LoadDataWithBaseUrl
方法是本机Android.Webkit.WebView
的方法。这是由Uno的WebView
(模仿UWP WebView
的API)在内部创建的。
原生WebView
不会直接公开,但是您可以轻松访问它:
XAML:
<Page x:Class="WebViewTest.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<WebView x:Name="XamlWebView" />
</Grid>
</Page>
隐藏代码:
#if !NETFX_CORE
using Uno.UI;
#endif
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
namespace WebViewTest
{
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
this.Loaded += MainPage_Loaded;
}
private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
#if __ANDROID__
var nativeWebView = XamlWebView.FindFirstChild<Android.Webkit.WebView>();
nativeWebView.LoadDataWithBaseURL(null, ...)
#endif
}
}
}
通过这种方式,您可以应用您描述的方法。