javascript - 如何使用 PhoneGap 保存网页供离线使用?

标签 javascript cordova

我正在使用 PhoneGap 开发 RSS 阅读器。到目前为止一切都很好,但现在我想提前下载链接的文章页面,这样用户就不必等待缓慢的连接。

使用 JQuery 通过 AJAX 很容易获取 HTML,但我还需要图像和 CSS。我可以从生成的 HTML 中获取图像和 CSS 的 URL,但路径是相对的。我认为这没有问题,因为我有基本 URL。不幸的是,它并没有我想象的那么简单:

一个示例文章是 http://www.golem.de/news/sicherheit-ecall-soll-motorradfahrern-das-leben-retten-1210-94854.html。包含的 CSS 文件具有相对 URL /staticrl/styles/golem_main_47-min.css。我尝试使用页面 URL 中的最后一个斜杠来查找相对路径的基础(W3C 说这就是它的工作方式)。所以它将是 http://www.golem.de/news/staticrl/styles/golem_main_47-min.css,但实际文件位于 http://www.golem .de/staticrl/styles/golem_main_47-min.css。我也可以在 http:// 之后使用第一个斜杠,这对我尝试的前三个示例都有效,但我很确定这并不总是有效,因为相对 URL 不是这样工作的。但我如何确定碱基是什么?

也许我缺少一种非常简单的方法来做到这一点?我也尝试过使用 IFrame,但 JavaScript 不允许访问跨域 IFrame 内容。

有没有人有过这样的经验?我现在完全卡住了。

最佳答案

我认为您误解了相对 URL 的工作原理。

相对 url 从主机名 (http://www.golem.de) 获取资源。

不是来自主机名 + 最后一个目录路径 (http://www.golem.de/news)。

您需要解析文章 url 并获取主机名,然后将资源路径附加到主机 url。这是获取主机名的示例函数:

var rssUrl = 'http://www.golem.de/news/sicherheit-ecall-soll-motorradfahrern-das-leben-retten-1210-94854.html';

GetHostName(rssUrl) // www.golem.de

function GetHostName(url) {
   return url.match(/:\/\/(.[^/]+)/)[1];
}

您可能想要修改正则表达式以保留协议(protocol) (http://),或者寻找其他方法从 url 解析主机名。

关于javascript - 如何使用 PhoneGap 保存网页供离线使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12680964/

相关文章:

javascript - 如何将 Twitter Bootstrap 工具提示应用于 <span> 中包含的文本?

javascript - 在 Backbone View 中添加 Cordova 事件监听器,而不是所有文档

javascript - 长按时显示菜单 iOS - Phonegap

javascript - Bootstrap - 想要隐藏内容直到模式加载

ios - 我想了解如何在 Windows 笔记本电脑中使用 PhoneGap 构建 iOS 应用程序?

javascript - Cordova 插件上的 count++

javascript - 从数据库 : Template7 and Framework7 加载数据

javascript - 使用 AngularJs 在选定的复选框上计算摘要

JavaScript 与 'this' 引用冲突

javascript - 无法获取同一 Angular 文件中第二个 Controller 的范围