首页 > 解决方案 > 使用 Cordova 为本地静态网站提供服务?

问题描述

我们目前正在开展一个项目,该项目包括一个网站,以及适用于 Android、iOS 和(是)Windows 手机的应用程序。

这些应用程序在所有三个平台上都是相同的,并且相对简单,至少在理论上是这样。

  1. 他们需要提供对网站内容的离线访问。这是静态内容,一组 .html 页面加上资产(图像、css、javascript 等)也是如此。
  2. 当互联网连接可用时,他们需要能够定期自动更新内容。
  3. 任何外部链接都应在用户的互联网浏览器中打开,而不是在应用程序中打开。
  4. 该应用程序不应显示任何浏览器“chrome”(例如地址栏等)。

似乎 Cordova 是解决这个问题的好方法(尽管我对其他建议持开放态度)。但是,我很难找到有关如何进行的任何信息。

对于第 1 点,我认为它的工作方式是应用程序加载某种形式的 Web 视图,指向 file://path/to/site/index.html。假设站点对所有内部链接和资产使用相对 URL,这足以提供站点的完全可浏览的离线版本。该应用程序将附带当前站点的静态导出。

对于第 2 点,我设想 Cordova 应用程序偶尔会运行同步过程,这本质上是对网站 API 的一些 Web 请求,以查明是否有新内容。然后它将下载任何新文件,将它们放在第 1 点中提到的文件结构中,覆盖现有文件。(出于这个问题的目的,我不在乎这是否会暂时使网站处于不一致的状态。)

第 3 点听起来微不足道,但我不确定是否如此。target="_blank" 就够了吗?或者在点击链接时使用一点 JavaScript 来触发一些 Cordova 动作?我们控制生成 HTML 的方式,因此我们可以在必要时插入额外的标记以供离线使用。

任何人都可以就如何以这种方式处理自动更新的本地静态站点提供任何建议吗?甚至可能吗?

标签: androidioscordovacross-platformwindows-10-mobile

解决方案


Cordova 主要将您的 html 文件存储在应用程序中,并在 WebView 中显示 index.html(或其他页面,如果您定义它)​​。这里很酷的是,Cordova 还将提供一个 API 来从 JS 调用设备 API。

Cordova 不会自动将您的 html 文件和资产重新加载到应用程序中。为此,您需要发布一个新的应用程序,或者您只需重新加载应用程序中的数据,然后您可以在 JavaScript 中控制所有这些。

如果您不需要任何设备 API,我建议您查看 ServiceWorkers 以缓存和重新加载文件。使用一些 HTML 标签,您还可以在按下“添加到主屏幕”后创建一个真正类似于应用程序的行为。

最好的问候马克


推荐阅读