Javascript 如何使用PhoneGap保存网页以供脱机使用?

Javascript 如何使用PhoneGap保存网页以供脱机使用?,javascript,cordova,Javascript,Cordova,我正在开发一个带有PhoneGap的RSS阅读器。到目前为止,一切都很顺利,但现在我想提前下载链接的文章页面,这样用户就不必等待缓慢的连接 使用JQuery通过AJAX获取HTML很容易,但是我还需要图像和CSS。我可以从生成的HTML中获取图像和CSS的URL,但路径是相对的。我认为这不会有问题,因为我有基本的URL。不幸的是,它并不像我想的那么简单: 一篇示例文章是http://www.golem.de/news/sicherheit-ecall-soll-motorradfahrern-d

我正在开发一个带有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\u main\u 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];
}

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

“相对url从主机名()获取资源”这不是真的。阅读规范。但只要对大多数提要有效,我就可以使用该解决方案。你指的是什么规范?根据第11页第5节。使用示例“”中的url,当使用一个斜杠启动相对url时,如第5.1节中的“/g”示例中所示,url应解析为“”。