2

我正在使用 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 内容。

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

4

1 回答 1

1

我认为您误解了相对 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 解析主机名。

于 2012-10-04T06:43:02.430 回答