【问题标题】:How to use WebView controls navigateToLocalStreamUri from WinJS/javascript如何使用来自 WinJS/javascript 的 WebView 控件 navigateToLocalStreamUri
【发布时间】: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


    【解决方案1】:

    根据 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 或本机 C++ 中)的情况下执行此操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-27
      • 2013-01-10
      • 1970-01-01
      • 2012-03-13
      • 1970-01-01
      • 1970-01-01
      • 2012-01-28
      相关资源
      最近更新 更多