10

我在 Metro 风格应用程序的 WebView 控件中加载 html 文件时遇到了一些麻烦。我一直在搜索互联网,发现您无法使用 NavigateTo 方法加载本地 html 文件。我还发现有一种解决方法,您可以在其中使用控件的 NavigateToString 方法。下面是我看到这个的链接: http: //social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/9cd8614d-2dc8-48ac-9cd9-57b03a644930

有人在关于该主题的帖子中举例说明了如何做到这一点。他们使用了一个字节数组,将调用 IInputstream.ReadAsync 方法获得的数据放入其中。我遇到的问题是,在我调用该方法后,字节数组中充满了 0,我认为这是不行的。谁能帮我这个?

4

3 回答 3

17

您可以使用ms-appx-web:///协议而不是切换上下文ms-appx:///,我已经在 HTML/JS Metro Style App 中成功加载了本地 Html 文件和关联的 CSS 和 JavaScript。

我没有在 XAML Metro Style App 中尝试过这个,但相信ms-appx-web:///可以使用该协议。限制是您的 Html(如果是本地的,即不是 Web 托管的)必须驻留WinRT 包中,在您的情况下,它似乎是 /Assets。

于 2012-06-28T08:59:01.327 回答
8

我遇到了同样的问题。在我的应用程序中,我有一个名为 Default.html 的文件被读取,它的内容显示在 WebView 控件中。

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

请注意,我正在使用await并且ReadTextAsync代码是异步的(在执行 IO 时应该这样做),您放置它的函数必须定义为异步,例如:

private async void LoadWebView( file ) { ... }
于 2012-06-04T01:10:43.310 回答
4

这是一个快速示例,告诉我这是否对您有帮助:

我的资产文件夹中有一个名为 MyHTMLPage 的 Html 文件,它有一个内容类型的构建操作和一个复制到输出以始终复制。我的 HTML 文件:

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

在我的主页.xaml 上:

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

在我的主页.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));
        }
    }

瞧,这应该可行。

于 2016-04-25T23:27:18.937 回答