2

我目前正在尝试使用 WebView 显示加密数据(使用 DPP)。问题是,如果在将 StorageFile 读入 IRandomAccessStream 后以任何方式操作流(即解密数据),我无法让 WebView 显示任何内容。

使用 Microsoft 提供的源可以轻松重现此问题:http: //code.msdn.microsoft.com/windowsapps/XAML-WebView-control-sample-58ad63f7

并更改“StreamUriWinRTResolver”类以将 IRandomAccessStream 转换为内存流,然后再转换回来。基本上,在第 128 行的 S4_NavToStream.xaml.cs 中,更改以下内容:

StorageFile f = item as StorageFile;
IRandomAccessStream stream = await f.OpenAsync(FileAccessMode.Read);
return stream.GetInputStreamAt(0);

有了这个:

StorageFile f = item as StorageFile;
IRandomAccessStream randStream = await f.OpenAsync(FileAccessMode.Read);
var stream = randStream.AsStream();
MemoryStream ms = new MemoryStream();
stream.CopyTo(ms);
return ms.AsInputStream();

这将在运行时显示一个空白页。我开始认为这是一个错误,除非我当然错误地使用了流转换。有没有人尝试过类似的东西?

4

1 回答 1

0

Thomas Huber 在 social.msdn.microsoft.com 上非常亲切地回答了我的问题。完整答案在这里:

http://social.msdn.microsoft.com/Forums/en-US/f51ab699-66c3-4961-8952-fbe341bf3e23/windows-81-webviewnavigatetostream-does-not-work-when-altering-the-stream

总之,问题在于将内存流转换为输入流。这是正确的工作代码:

StorageFile f = item as StorageFile;
IRandomAccessStream randStream = await f.OpenAsync(FileAccessMode.Read);
var stream = randStream.AsStream();
var ms = new MemoryStream();
stream.CopyTo(ms);

InMemoryRandomAccessStream msras = new InMemoryRandomAccessStream();
DataWriter dw = new DataWriter(msras);
dw.WriteBytes(ms.ToArray());
await dw.StoreAsync();
var inputStream= msras.GetInputStreamAt(0);
return inputStream;
于 2013-10-02T17:40:28.663 回答