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://それは私が試した最初の 3 つの例で機能しますが、相対 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 に答える