2016-02-22 26 views
1

WebView控件在Windows 8.1之後,並且來自C#/ VB/C++,它被記錄並易於與NavigateToLocalStreamUri調用一起使用。然而,在WinJS中,即使在MSDN部分的Internet Explorer上也有半文檔,但沒有例子。如何使用WebView控件來自WinJS/javascript的navigateToLocalStreamUri

問題是我們必須將IUriToStreamResolver對象傳遞給此調用(Windows.Web甚至不包含它在WinJS中)。然而在WinJS中,據我所知,從WinRT類派生或實現這些接口是不可能的。 WinJS只是認爲IUriToStreamResolver是「對象」和下面的代碼失敗,「沒有這樣的接口支持」:

 var streamResolver = WinJS.Class.define(null, {}, { 
      uriToStreamAsync: function (uri) { 
       return Windows.Storage.StorageFile.getFileFromApplicationUriAsync(uri).then(function (file) { 
        return file.openAsync(Windows.Storage.FileAccessMode.read); 
       }); 
     }}); 
       var webViewControl = window.document.createElement("x-ms-webview"); 
       webViewControl.width = width; 
       webViewControl.height = height; 

       webViewControl.navigateToLocalStreamUri(webViewControl.buildLocalStreamUri("default", "/default.html"), new streamResolver()); 
       webViewControl.innerHTML = document.documentElement.innerHTML; 
       window.document.body.appendChild(webViewControl); 

我的結論是目前直到微軟實現其供應JavaScript事件的包裝對象,我們必須使用WinRT庫,用我們自己的對象導入WinMD,允許我們用C#/ VB/C++封裝這些代碼。該類可以被稱爲UriToStreamResolverWrapper,它具有可以通過addEventListener/removeEventListener使用的OnUriToStreamAsync事件。我可以在C++後發佈代碼,但它似乎像微軟錯過了這一個,真的應該支持它...

回答

1

根據微軟的博客,這是不可能的:「在JavaScript應用程序,這是不可能的在JavaScript中編寫UriResolver對象,但是,您可以使用以C++,C#或VB編寫的解析器,更多詳細信息請參閱WebView SDK示例中的方案4。在https://blogs.windows.com/buildingapps/2013/07/17/whats-new-in-webview-in-windows-8-1/

這是成功實施的工作和測試模型在這裏:http://www.codeproject.com/Tips/1080256/Using-the-WebView-controls-navigateToLocalStreamUr

我不認爲有什麼辦法做到這一點,而不在一個單獨的庫,在VB.NET/C#對象/ C++/CX或本機C++,直到Microsoft提供包裝。

相關問題