1

假设我的WebView页面中有一个,其内容由WebView.NavigateToString(string html). 现在的问题是 html 字符串包含一些<img>标签,例如

<img src="http://www.remotefakesite.com/1.jpg" />

但是,除非请求具有特殊的 cookie,否则无法正确下载图像。但是请求是由控件发送的,我不知道如何修改请求(向其中添加cookie)。我试过设置HttpRequest.DefaultWebProxy,但它不适用于内置控件发送的请求。

另一种解决方案是通过我自己的 HttpWebRequest(使用正确的 cookie)将图像下载到本地文件夹,然后将 html 字符串中的 img 标签修改为

<img src="files:///xxxxx" />

但显然files:///该方案违反了 Metro 应用程序的安全策略。也不行ms-appxms-appdata因为下载的图像不是我项目的一部分。

你有什么解决办法吗?

4

4 回答 4

3

我在这里做了一些测试,如果您可以将图像下载到项目文件夹中的示例。示例在“媒体”文件夹中,然后您可以使用以下代码打开图像:

<img src="ms-appx-web:///Media/10.jpg" />
于 2012-10-22T13:40:32.607 回答
2

如果图像大小不是问题,您可以尝试使用带有所需 cookie 的自定义 HTTP 请求下载它,对其进行 base64 编码,并将其插入到 src 属性中:

<img src="data:image/png;base64,iVBOR8Q..." />

并使用 NavigateToString 方法将其与 html 的其余部分一起传递给 WebView。

这可能不是世界上最好的解决方案,但与其他选项相比,它确实有效。

于 2012-11-19T04:21:05.830 回答
0

您可以启用应用程序的图片库功能,并使用图片库位置来下载图像。这是访问图片库的指南

更新:

然后从图片库中的图像对象创建图像。一个例子是:

async private void LoadImage()
{
    try
    {
        IReadOnlyList<Windows.Storage.StorageFile> resultsLibrary =
            await Windows.Storage.KnownFolders.PicturesLibrary.GetFilesAsync();
        MessageBlock.Text += "Show image: " + resultsLibrary[0].Name + "\n";
        Windows.Storage.Streams.IRandomAccessStream imageStream =
            await resultsLibrary[0].OpenAsync(Windows.Storage.FileAccessMode.Read);
        Windows.UI.Xaml.Media.Imaging.BitmapImage imageBitmap =
            new Windows.UI.Xaml.Media.Imaging.BitmapImage();
        imageBitmap.SetSource(imageStream);
        ImagePlayer.Source = imageBitmap;
    }
    catch (Exception ex)
    {
        MessageBlock.Text += "Exception encountered: " + ex.Message + "\n";
    }
}
于 2012-10-22T07:24:21.073 回答
0

您可以更好地使用它,就像 HTML 一样编写:

this.InitializeComponent();

string htmContent = @" <html>
<head></head>
<body>
<img src="http://www.remotefakesite.com/1.jpg" />
</body>
</html>";

preview.NavigateToString(htmContent);

只有你需要一个 webview 元素(这里称为“预览”)

于 2012-10-22T09:43:07.177 回答