javascript - 如何从WinJS/javascript使用WebView控件navigateToLocalStreamUri

标签 javascript webview windows-runtime winjs

WebView 控件出现在 Windows 8.1 之后,并且从 C#/VB/C++ 开始,它已被记录下来,并且可以通过 NavigateToLocalStreamUri 调用轻松使用。然而在 WinJS 中,尽管 Internet Explorer 的 MSDN 部分也有半文档,但没有示例。

问题是我们必须将 IUriToStreamResolver 对象传递给此调用(Windows.Web 甚至在 WinJS 中不包含它)。然而,据我所知,在 WinJS 中,不可能从 WinRT 类派生或实现这些接口(interface)。 WinJS 只是将 IUriToStreamResolver 视为“对象”,并且以下代码失败并显示“不支持此类接口(interface)”:

        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++ 发布此代码,但似乎 Microsoft 错过了这个代码,并且确实应该支持它......

最佳答案

根据 Microsoft 博客,这是不可能的:“在 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

我认为,在 Microsoft 提供包装器之前,如果没有 VB.NET/C#/C++/CX 或 native C++ 中的单独库中的对象,就没有任何方法可以做到这一点。

关于javascript - 如何从WinJS/javascript使用WebView控件navigateToLocalStreamUri,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35546022/

相关文章:

javascript - 常见的页眉和页脚错误

javascript - 添加工厂时出现错误 : [$injector:unpr]

android - 如何测试包含 WebView 的 Activity?

ios - 键盘在 Web View 中未正确显示 - 横向模式

c# - 在 WinRT 中使用 StoryBoard 时无法解析 TargetProperty

javascript - 如何使用 Javascript 将 innherHTML 字符串拆分为某个字符(如 '+' 符号)之后的特定部分

javascript - 获取异步执行的多个 promise 的状态

javascript - Webview javascript 未执行

c# - wp8 Package.Current.InstalledLocation.GetFolderAsync 获取不到Assets下的新建文件夹

javascript - Visual Studio、Windows 8 HTML5 Javascript 问题