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++後發佈代碼,但它似乎像微軟錯過了這一個,真的應該支持它...