【发布时间】:2016-02-22 21:38:46
【问题描述】:
WebView 控件出现在 Windows 8.1 之后,并且从 C#/VB/C++ 开始,它已被记录并且易于通过 NavigateToLocalStreamUri 调用使用。然而,在 WinJS 中,即使在 Internet Explorer 的 MSDN 部分也有半文档,但没有示例。
问题是我们必须将一个 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);
我目前的结论是,在 Microsoft 实现提供 javascript 事件的包装器对象之前,我们必须使用 WinRT 库,使用我们自己的对象导入 WinMD,以便我们可以在 C#/VB/C++ 中包装此代码。该类可以称为 UriToStreamResolverWrapper,它有一个 OnUriToStreamAsync 事件,可以通过 addEventListener/removeEventListener 使用。我可以稍后在 C++ 中为此发布代码,但微软似乎错过了这个,真的应该支持它......
【问题讨论】:
标签: javascript webview windows-runtime winjs