Windows 8 从WinJS调用本机C#';它加载在WebView中

Windows 8 从WinJS调用本机C#';它加载在WebView中,windows-8,windows-runtime,uwp,winjs,Windows 8,Windows Runtime,Uwp,Winjs,我知道可以从WinJS调用本机C,方法是创建一个Windows运行时组件,然后将其添加为WinJS应用程序的引用,但是当WinJS应用程序加载到WebView中时,是否可以从WinJS应用程序执行相同的操作 我已经试过了,但是WebView中的WinJS应用程序似乎在完全不同的上下文或其他环境中运行,并且找不到符号,因此,它崩溃并提供启动一个新的VS2013实例来尝试和调试。您是正确的,本地JavaScript应用程序的应用程序主机上下文和Web视图的上下文是两个不同的东西。只有应用程序主机允许

我知道可以从
WinJS
调用本机
C
,方法是创建一个Windows运行时组件,然后将其添加为
WinJS
应用程序的引用,但是当
WinJS
应用程序加载到
WebView
中时,是否可以从
WinJS
应用程序执行相同的操作


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

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

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

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


我在我的免费电子书《用HTML、CSS和JavaScript编写Windows应用商店应用程序》(第二版)的第4章(从第204页开始)中详细介绍了这些内容。

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

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

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

我在我的免费电子书《用HTML、CSS和JavaScript编写Windows应用商店应用程序》(第二版)的第4章(从第204页开始)中详细介绍了这些内容