【问题标题】:Run Javascript+WinJS code from universal windows application on C#在 C# 上从通用 Windows 应用程序运行 Javascript+WinJS 代码
【发布时间】:2015-09-16 17:23:48
【问题描述】:

前段时间,我们开始在 Javascript+WinJS 上开发 Win8.1/Win10 的应用程序(使用 Javascript 不是我的决定,但是已经完成了)。半年之后,我们将产品发布到 Windows 应用商店,几个月后我们意识到我们无法在 Javascript 上实现我们想要的所有功能。所以现在我们决定切换到 C#/XAML。但是,我们已经有相当大的基于 Javascript+WinJS 编写的代码库。有想法我们可以在 C# 上构建新的应用程序(UI、新功能),但也可以重用当前的 JS 代码。我已经阅读了很多 MSDN,据我所知,可以在 C# 上创建类库并从 JS 中使用它,但我们的情况正好相反——我需要将 JS+WinJS 封装在一些“组件”中并使用它来自我们新的 C# 应用程序。是否可以?我什至在 Visual Studio 中都没有看到诸如“通用应用程序的 Javasctipt 库”之类的项目。

事情可能还不错,我们的应用程序是纯 JS(我总是可以将 WebView 放在表单上并评估一些 JS 代码)。但是 WinJS 在 WebView 中不起作用!

所以我不能将我们的 JS+WinJS 代码用作“类库”,也不能在 WebView 中运行它。我可以使用其他方法吗?

【问题讨论】:

    标签: c# winjs windows-10 win-universal-app


    【解决方案1】:

    WinJS 只是一个 JS 库,它不依赖于任何 Windows 运行时 API。 WinJS 甚至可以用于 Web 开发 (check this out)。

    标准 WinJS 应用程序模板处理 Application.Activated 事件并在处理程序中调用 WinJS.UI.processAll()。只要您将代码托管在WebView 控件中,Application.Activated 事件就不会触发,因为应用程序已被激活。

    问题很容易解决,你只需要显式调用WinJS.UI.processAll()

    <script>
        WinJS.UI.processAll();
    </script>
    

    【讨论】:

    • 确实,WinJS 本身甚至可以在浏览器中运行。但是,我们的 JS+WinJS 应用程序也使用 WinRT 类型(Windows.Media、Window.Storage、Windows.Security 等),我无法从运行在 WebView 中的 JS 创建这些类型的对象。
    • @Ezh 恐怕只有通过ScriptNotify才能从WebView使用WinRT。
    猜你喜欢
    • 2017-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多