1

我知道可以通过创建 Windows 运行时组件然后将其添加为应用程序的引用来调用本机C#-WinJS但是当应用程序加载到内部时是否可以WinJS从应用程序执行相同的操作?WinJSWebView

我已经尝试过了,但似乎WinJS里面的应用程序在WebView完全不同的上下文或其他东西中运行并且没有找到符号,所以它崩溃并提供启动一个新实例VS2013来尝试和调试。

4

1 回答 1

4

你是正确的,原生 JavaScript 应用程序的应用程序宿主上下文和 webview 的上下文是两个不同的东西。只有应用程序主机允许 JavaScript 与 WinRT 对话,这也适用于 WinRT 组件,因为组件的结构与 WinRT API 本身的结构相同。实际上,您的问题与询问是否可以将 WinRT 组件加载到 Web 浏览器中(因为 webview 本质上是 Web 浏览器控件)相同,那么答案是否定的。

让 webview 中的代码脱离该上下文并与可以访问 WinRT API 的任何代码(JS、C# 等)对话的唯一方法是在 webview 中使用 window.external.notify。该应用程序将该消息作为来自 webview 的事件接收(在带有 x-ms-webview 的 JS 中是MSWebViewScriptNotify,在带有 XAML WebView 的 C#/VB 中是ScriptNotify)。然后,应用程序可以处理参数调用 API 作为响应。

当然,因为 window.external.notify 不像函数调用那样可以返回值,所以应用程序必须通过其 InvokeScriptAsync 方法将结果发送到 webview,使其成为异步关系。

我在免费电子书的第 4 章(从第 204 页开始)详细讨论了使用 HTML、CSS 和 JavaScript 编程 Windows 商店应用程序,第 2 版http://aka.ms/BrockschmidtBook2

于 2015-03-03T22:31:32.117 回答