Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WebView Metro样式应用程序中加载本地html文件_C#_Webview_Microsoft Metro - Fatal编程技术网

C# 在WebView Metro样式应用程序中加载本地html文件

C# 在WebView Metro样式应用程序中加载本地html文件,c#,webview,microsoft-metro,C#,Webview,Microsoft Metro,在metro风格的应用程序中,在WebView控件中加载html文件时遇到了一些问题。 我一直在互联网上搜索,发现不能用NavigateTo方法加载本地html文件。我还发现有一种变通方法,可以使用控件的NavigateToString方法。下面是我看到的链接: 有人在一篇关于这个话题的帖子中举例说明了如何做到这一点。他们使用和一个字节数组,将调用IInputstream.ReadAsync方法获得的数据放入其中。我遇到的问题是,在调用该方法后,字节数组中充满了0,我认为这是不正确的。有人能帮

在metro风格的应用程序中,在WebView控件中加载html文件时遇到了一些问题。 我一直在互联网上搜索,发现不能用NavigateTo方法加载本地html文件。我还发现有一种变通方法,可以使用控件的NavigateToString方法。下面是我看到的链接:


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

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

var html = await Windows.Storage.PathIO.ReadTextAsync("ms-appx:///Assets/Default.html");
MyWebView.NavigateToString(html);
请注意,我使用的是
wait
ReadTextAsync
,因此代码是异步的(在执行IO时应该是异步的),您放置此截取的函数必须定义为异步,例如:

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

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


我没有在XAML Metro风格的应用程序中尝试过这一点,但我相信可以使用
ms appx web://
协议。限制是您的Html(如果是本地的,即不是web托管的)必须驻留在WinRT包中,在您的案例中,它似乎是一个WinRT包,即/Assets。

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

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

瞧,这应该行得通。

谢谢你的回复。你的建议确实有效,但我在想,有没有办法加载html页面标题中调用的js和css文件?本地加载?否:/WebView控件此时不理解ms appx协议,这正是执行此操作所需的。关于这件事,有一条线索。我也遇到了同样的问题,只是将所有css和JavaScript都包含到HTML文件中,这并不理想。希望这将很快得到解决!我尝试了一下你的答案,效果很好:D.谢谢你的帮助。如果html文件在WinRT包的“外部”呢?比如说,在Windows8.1中的“Windows.Storage.ApplicationData.Current.LocalFolder”中,当我尝试将html文件复制到assets文件夹时,访问被拒绝。
 <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));
        }
    }