假设我的页面中有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-appx
和ms-appdata
都不起作用,因为下载的图片不属于我的项目。
你有解决方案吗?
答案 0 :(得分:3)
我在这里做了一些测试,如果你可以将图像下载到项目文件夹中的示例。 在“Media”文件夹中的示例,然后您可以使用以下代码打开图像:
<img src="ms-appx-web:///Media/10.jpg" />
答案 1 :(得分:2)
如果图像大小不是问题,您可以尝试使用带有所需cookie的自定义HTTP请求下载它,base64对其进行编码,然后将其插入到src属性中:
<img src="data:image/png;base64,iVBOR8Q..." />
使用NavigateToString方法将其余的html传递给WebView。
这可能不是世界上最佳解决方案,但与其他选项相比,它只是有效。
答案 2 :(得分:0)
您可以启用应用的图片库功能,并使用图片库位置下载图片。 Here is a guide on accessing pictures library
更新:
然后从图片库中的图像对象创建图像。一个例子是:
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";
}
}
答案 3 :(得分:0)
你可以更好地使用它,就像HTML一样写:
this.InitializeComponent();
string htmContent = @" <html>
<head></head>
<body>
<img src="http://www.remotefakesite.com/1.jpg" />
</body>
</html>";
preview.NavigateToString(htmContent);
只需要一个webview元素(此处称为“预览”)