在WebView Metro Style应用程序中加载本地html文件

时间:2012-05-21 11:52:14

标签: c# webview microsoft-metro

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

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

3 个答案:

答案 0 :(得分:17)

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

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

答案 1 :(得分:8)

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

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

请注意,我正在使用awaitReadTextAsync,因此代码是异步的(就像在执行IO时那样),你剪切它的函数必须定义为async,例如:

private async void LoadWebView( file ) { ... }

答案 2 :(得分:3)

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

我的Assets文件夹中有一个名为MyHTMLPage的Html文件,它有一个类型为content的构建操作,以及一个Copy to Output to Always Always。我的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>

在我的主页面上:

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

和Voila这应该有用。