none
Webview如何加载本地网页? RRS feed

  • 问题

  •             在Webview中如何加载本地的网页,比如有一个a.html放在本地文件夹Htmls中,在Webview中如何加载?
    2012年7月17日 1:38

答案

全部回复

  • 2012年7月17日 7:30
    版主
  • 参考:http://social.msdn.microsoft.com/Forums/zh-SG/metroappzhcn/thread/0f94abbc-3261-4576-ad2a-60e141cda5c0


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    版主,你好,查看了http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/9cd8614d-2dc8-48ac-9cd9-57b03a644930这个网址下的处理方法,

     

     

    StorageFile sf = await Package.Current.InstalledLocation.GetFileAsync("TestPage.html");
          uint length = (uint)sf.Size;
          IInputStream input = await sf.OpenForReadAsync();
          byte[]  buffer = new byte[length];
          await input.ReadAsync(buffer.AsBuffer(), length, InputStreamOptions.None);
          string content = Encoding.GetEncoding("utf-8").GetString(buffer, 0, buffer.Length);
          webView.NavigateToString(content);
    

     

    使用如上代码时出现错误,

    请问这个Size要如何获得?

    我偿试指定一个length后,输出的变成了乱码?

                    StorageFile sf = await Package.Current.InstalledLocation.GetFileAsync("a.html");
                    uint length = 10000;
                    IInputStream input = await sf.OpenReadAsync();
                    byte[] buffer = new byte[length];
                    await input.ReadAsync(buffer.AsBuffer(), length, InputStreamOptions.None);
                    string content = Encoding.GetEncoding("UTF-8").GetString(buffer, 0, buffer.Length);
                    parentingweb.NavigateToString(content);

     求指教。

    2012年7月18日 2:16
  • 那个帖子是Developer Preview下的,所以有些属性已经发生变化了。现在是Length这个没错。

    然后关于乱码,这个还和你的页面内容有关,是否你的HTML指定了编码为UTF-8?

    <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
        <p>Hello World!</p>
    </body>
    </html>


    上面的代码

                    StorageFile sf = await Package.Current.InstalledLocation.GetFileAsync("a.html");
                    uint length = 10000;
                    IInputStream input = await sf.OpenReadAsync();
                    byte[] buffer = new byte[length];
                    await input.ReadAsync(buffer.AsBuffer(), length, InputStreamOptions.None);
                    string content = Encoding.GetEncoding("UTF-8").GetString(buffer, 0, buffer.Length);
                    parentingweb.NavigateToString(content);


    是完全正确的,但是这个代码要求你的页面是UTF-8编码的,如果是其他的话,可能就出现乱码了。现在UTF-8编码的页面应该已经是一个标准了。

    如果已经是UTF-8编码的页面,这个代码也可以简单的写:

                IStorageFile sf = await Package.Current.InstalledLocation.GetFileAsync("a.html");
                string content = await FileIO.ReadTextAsync(sf,  Windows.Storage.Streams.UnicodeEncoding.Utf8);
                parentingweb.NavigateToString(content);


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us


    2012年7月18日 6:27
    版主
  •         问题已搞定,乱码的原因是页面不是UTF-8格式的,谢谢版主。
    2012年7月20日 8:32
  • 那个帖子是Developer Preview下的,所以有些属性已经发生变化了。现在是Length这个没错。

    然后关于乱码,这个还和你的页面内容有关,是否你的HTML指定了编码为UTF-8?

    <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
        <p>Hello World!</p>
    </body>
    </html>


    版主,你好,还有个网页的问题请教下,就是我在WebView中加载了一个本地网页后(a.html),然后点击网页中的链接访问另一个本地的网页(b.html),请问这个如何实现?(另外网页的样式如何加载呢,c.css与a.html,b.html在同一个目录下的)在电脑的浏览器中打开a.html点击链接可以链接到b.html,但是在Win8中提示“已取消到该网页的导航”(另外,我现在使用的是C#语言开发的)。

             


    2012年7月26日 1:42
  • 同页内可以导航,跨页在这里就不行了。而且css只有全部一次加载到页面中,如嵌入式的样式表。 如果你需要大量的HTML作为应用内容,我建议还是采用HTML5方案。

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年7月27日 9:02
    版主
  • 同页内可以导航,跨页在这里就不行了。而且css只有全部一次加载到页面中,如嵌入式的样式表。 如果你需要大量的HTML作为应用内容,我建议还是采用HTML5方案。

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us


    版主,你好,今天无意中在网上到了一个字符串“ms-appx-web:///”,将此字符串加到所有链接的本地网页,样式文件等的前面后,网页就可以正常显示了(<a href="ms-appx-web:///a.html">.........</a>, <link rel="stylesheet" href="ms-appx-web:///style.css" />)。
    2012年7月30日 10:55