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

时间:2012-10-01 20:57:05

标签: javascript cordova

我正在使用PhoneGap开发RSS-Reader。到目前为止,一切都很顺利,但现在我想提前下载链接的文章页面,因此用户不必等待连接速度慢。

使用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中的最后一个斜杠来查找相对pasths的基础(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内容。

有没有人有这样的经历?我现在很困惑。

1 个答案:

答案 0 :(得分:1)

我认为你误解了相对网址是如何运作的。

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

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

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

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];
}

您可能希望修改正则表达式以保留协议(http://),或者找到其他方法从网址解析主机名。