c# - 使用 NavigateToLocalStreamUri 的 WebView 实际上并没有导航

标签 c# xaml windows-runtime windows-8.1

我有一个 WebView,用于从 ApplicationData.Current.LocalFolder 加载本地文件。我做了一个在 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() 的第一次调用工作正常,但它不会加载我的第二个页面。 WebView 只停留在它的当前页面上。

WebView 引发 NavigationStarting 和 ContentLoading 事件,但 NavigationCompleted 永远不会在第二页被命中。

编辑:我可以确认我的第二个页面上的 html 导致了这个问题。我尝试导航到一个临时页面,但效果很好。我仍然不知道如何调试我的第二个页面。

如有任何帮助,我们将不胜感激。

最佳答案

我想通了。我的 html 页面正在使用 JQuery 对本地文件发出 ajax 请求。在我的 ajax 请求中,我将“async”标志设置为 true。当您这样做时,Windows 8.1 显然不喜欢它。

关于c# - 使用 NavigateToLocalStreamUri 的 WebView 实际上并没有导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19460858/

相关文章:

c# - 在图表控件中添加一个按钮

c# - wpf 目标属性依赖

c# - 找出风格问题的原因

wpf - WPF 如何处理对空对象属性的绑定(bind)?

xaml - 让 TextBox 拉伸(stretch)以填充 StackPanel 中的宽度

xaml - 按钮样式看起来像应用栏按钮

c# - 如何在同一个项目中同时拥有 MVC 和 Razor 页面?

c# - azure - 操作日志 api

c# - 使用 HtmlAgilityPack 编写 LINQ 来解析 aspx 页面

c++ - 如何在 C++ WinRT 中执行 SHA512 哈希?