Skip to main content
 首页 » 编程设计

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

2024年02月01日27sharpest

我有一个 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 显然不喜欢它。