我有一个当前使用 Electron 进行 Windows 桌面部署的应用程序。用户界面的大部分是普通的旧 JS/CSS/HTML5,节点部分主要只是将数据导入 chromium 部分的基础设施。在 Firefox 和 Chrome 放弃这个想法之前,这几乎就是人们所说的“WebApp”。
我能够使用 makeappx 将这个现有的 Electron 应用程序转换为 UWP,甚至将它放入 Window Store,只是发现 Surface Hub 拒绝运行它,因为它不是“纯”UWP,而是包装到的 Win32 应用程序看起来像 UWP。在 Surface Hub 上运行是我的客户的要求。
该应用程序在 Edge 中运行良好,但我的客户需要能够在没有互联网连接时使用该应用程序。
我的下一个想法是将应用程序放到闪存驱动器上,然后将 Edge 指向它。当然,浏览 file:// URLs 在此硬件上不起作用,因此不起作用。
我的下一个想法是,我可以构建一个简单的 HTTP 服务器,将其放入存储中的内容(或从闪存驱动器读取内容),然后让它们将 Edge 指向 localhost。但是,我发现一堆文档说在 Windows 应用商店应用程序中禁止使用环回设备。(企业应用程序有一个解决方法,但我不知道这是否适用于 Surface Hub,并且客户端真的只想从 Windows 应用商店安装,而不必做任何奇怪的事情)。
一年前有一些关于微软制造一些技术以方便将网络应用程序移植到 Windows 桌面的传言。我找到了“Windows 10 Hosted Web Apps”,但这似乎只是在网站周围制作了一个网络商店容器。在我的情况下,该网站将不可用,因为他们需要离线运行该东西。据我所知,似乎没有“未托管”Web App 选项。
回到 Chrome 托管网络应用程序的时候,我设法使用离线清单来说服浏览器在你第一次运行它时下载整个应用程序。但这从来没有可靠地工作过,因为 Chrome 会无缘无故地自发丢弃缓存。由于 Surface Hub 在您结束会话时会主动丢弃缓存,我怀疑这种方法也行不通。(我发现去年的一篇 Windows 博客文章似乎在描述这个技巧并将其称为渐进式 Web 应用程序或 PWA;但是,由于它基于缓存工作者,我担心 Surface Hub 只是将其丢弃。)
那么,如何让我的 Web 应用在 Surface Hub 上脱机工作?如果有帮助的话,我很高兴将闪存驱动器作为解决方案的一部分。
- 更新 -
请参阅已接受的答案。事实证明,您不需要开发人员工作室来执行此操作。如果您创建一个 AppxManifest.xml 文件并将整个 webapp 放入一个文件夹中,则可以使用 MakeAppx.exe 将其捆绑在一起。请注意,Windows 应用商店有一些奇怪的要求,例如您的 UTF-8 文件需要在前面有 BOM。