ApplicationData.Current.LocalFolder からローカル ファイルをロードするために使用している WebView があります。WebView で Navigate を呼び出すメソッドを作成しました
public override void BrowserNavigateLocal(string fileName)
{
Uri uri = browser.BuildLocalStreamUri("page", fileName);
browser.NavigateToLocalStreamUri(uri, new MyStreamUriResolver());
}
私の IUriToStreamResolver は次のようになります
public sealed class MyStreamUriResolver : IUriToStreamResolver
{
public IAsyncOperation<IInputStream> UriToStreamAsync(Uri uri)
{
lock (this)
{
if (uri == null)
{
throw new Exception();
}
string path = uri.AbsolutePath;
return GetContent(path).AsAsyncOperation();
}
}
private async Task<IInputStream> GetContent(string path)
{
try
{
Uri localUri = new Uri("ms-appdata:///local/HTML" + path);
//StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(localUri);
//IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.Read);
StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(localUri).AsTask().ConfigureAwait(false);
IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.Read).AsTask().ConfigureAwait(false);
if (true)
{
Windows.Storage.Streams.DataReader reader = new DataReader(stream);
await reader.LoadAsync((uint)stream.Size);
string fileContent = reader.ReadString((uint)stream.Size);
stream.Seek(0);
}
return stream;
}
catch (Exception ex)
{
throw new Exception("Path is invalid");
}
}
}
WebView が要求しているすべてのファイルの内容を確認できるデバッグ コードをいくつか含めました。ファイルはすべて正常に表示され、例外はスローされません。
BrowserNavigateLocal() への最初の呼び出しは完全に機能しますが、2 番目のページが読み込まれません。WebView は現在のページにとどまります。
WebView は NavigationStarting および ContentLoading イベントを発生させますが、NavigationCompleted は 2 ページ目でヒットしません。
編集: 2 番目のページの html が問題を引き起こしていることを確認できます。一時ページに移動しようとしましたが、完全に機能しました。2 番目のページをデバッグする方法がまだわかりません。
どんな助けでも大歓迎です。