2013-10-19 60 views
1

我有一個WebView用於從ApplicationData.Current.LocalFolder加載本地文件。我做了一個方法調用瀏覽上的WebView使用NavigateToLocalStreamUri的WebView實際上並不實際導航

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導致了問題。我試圖導航到一個臨時頁面,它的工作完美。我仍然不知道如何去調試我的第二頁。

任何幫助將不勝感激。

回答

5

我想通了。我的html頁面使用JQuery爲本地文件發出ajax請求。在我的ajax請求中,我將「異步」標誌設置爲true。 Windows 8.1顯然不喜歡它,當你這樣做。