1

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 番目のページをデバッグする方法がまだわかりません。

どんな助けでも大歓迎です。

4

1 に答える 1

5

私はそれを考え出した。私のhtmlページは、JQueryを使用してローカルファイルのajaxリクエストを作成していました。私の ajax リクエストでは、「async」フラグを true に設定していました。これを行うと、Windows 8.1 は明らかに気に入らないようです。

于 2013-10-24T14:50:14.653 に答える