我正在使用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内容。
有没有人有这样的经历?我现在很困惑。
答案 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://),或者找到其他方法从网址解析主机名。