2015-03-02 14 views
1

我知道可以通过创建Windows运行时组件调用本机C#WinJS来调用,然后将其作为对WinJS应用程序的引用 - 但是否可以做同样的事情当它加载在WebView内时,应用程序从WinJS应用程序中获取的东西?从WinJS调用本机C#加载在WebView中

我已经试过了,但它似乎WinJS应用的WebView内部在一个完全不同的环境或操作的东西,并没有找到符号,所以它崩溃,并提供发动VS2013一个新的实例来尝试和调试。

回答

3

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

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

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

我再谈谈第四章中的细节我免费的电子书,Windows程序设计使用HTML,CSS和JavaScript,第2版http://aka.ms/BrockschmidtBook2店应用程序(204页起)。