5

像大多数 .NET 开发人员一样,我正在观看在卡利阿纳海姆举行的 Build Event 的主题演讲,并且对使用 JavaScript、HTML5 和 CSS3 为 Windows 8 构建应用程序的新支持提出了疑问。

他们展示了很多例子,甚至说新的 Windows 8 市场是使用这些技术编写的。唯一让我猜测的是,当他们将 JavaScript 归入 C# 的同一类别时,您可以使用 JavaScript 对您的 Windows 应用程序(可以直接访问 .NET)进行编程。

显然,作为一名 Web 开发人员,考虑到我使用 JavaScript、HTML5 和 CSS3 构建的一些应用程序,这是一个非常棒的消息。

我的问题是,我们为 Windows 8 构建的应用程序是否真正符合 Web 标准?我们能否为 Windows 8 构建应用程序并转身在网络上启动它们?当前在线的 Web 应用程序可以访问他们演示的某些功能吗?

就像我说的那样,这将是一个了不起的进步。更不用说 Silverlight,我已经为它编写了很多应用程序,以及它在混合岩石中的工作方式。用我用 C# 编写的一些应用程序替换 JavaScript 的想法甚至不是一个选项。

这只是为了让基于“Web”的开发人员为 Windows 开发还是这是一个用于构建应用程序的跨平台解决方案?

4

3 回答 3

7

稍微澄清一下,Javascript/HTML5/CSS3 windows 程序在称为 WinRT(Windows 运行时)的新层上运行,而不是 .Net。所有新的 Windows Metro 风格应用程序都将构建在这一层之上,而不是旧的 .Net。如果您的应用程序使用 WinRT 功能,显然您需要 Windows 来运行该应用程序。如果您想集成这些功能,这是您的选择。(显然,这取决于您尝试使用您的应用程序做什么)我相信您可以构建一个符合所有标准的应用程序并让它在系统上运行得很好——您只是不会使用任何 MS 特定的功能。从这个意义上说,它就像您作为应用程序启动的网页。

其他注意事项:

  • MSIE 目前使用一些-ms特定的前缀,直到这些功能被 W3C 接受并给出官方的跨浏览器名称。与-webkit-border-radius-moz-border-radius不同border-radius

  • HTML5 使用了一些功能,例如大多数浏览器中尚未实现的网格。

  • Microsoft 包含许多 Javascript 库,以使构建应用程序变得容易。其中许多是基于 jQuery 的。有些是特定于 Windows 的。不确定在其他地方使用它们的许可是什么。我假设 jQuery 是可移植的,而 Windows 的,在 WinRT 之外使用是没有意义的。

于 2011-09-16T17:53:21.377 回答
5

@马特

为了澄清“逆向”,用 HTML5 编写的标准 Web 应用程序作为 Metro 应用程序运行:

假设您的应用程序没有做“坏事”,那么是的。Metro 应用程序环境默认受到限制。为了从 HTML5/JS 应用程序中访问非本地资源(例如网站),您必须创建所谓的“Web 上下文”。

Web 上下文允许应用程序访问 Internet 和不安全的资源,同时防止相同的上下文访问特权资源,例如 Windows 运行时 API。

这最终意味着,如果您需要托管 Bing 地图小部件并希望从系统获取 GPS 信息,则需要以下内容:

  1. 页面内的 iframe(默认为本地上下文)托管包含 Bing 地图小部件的 Web 上下文
  2. 使用 window.postMessage 在 Local Context 和 Web Context 之间发送数据(包含在 iframe 中)
  3. 调用 Windows 运行时 API 以从上述本地上下文访问设备的 GPS 位置

此应用程序模型为您提供了安全性,即在 JS 应用程序中打开的任何网站都不会让恶意 JS 执行 Windows 运行时 API 来抓取您的数据。这可能是您必须在现有 Web 应用程序中重新架构以使其运行的最大领域,因为如果数据来自不安全的资源,您必须在上下文之间推送数据。

于 2011-09-16T18:26:40.377 回答
1

Short answer is no -- apps built using the WinRT stack won't be able to run in a "normal" browser. I'm not sure about the converse though -- if a standard web application written with HTML5 can be run as a Metro app.

于 2011-09-16T17:51:39.303 回答