2011-08-26 4 views
7

私はRuby on Rails v3.0.9を使用しています。(私の場合はfavicon.icoアイコン画像)が正常にWebサイトから取得されているかどうかを確認します。そうでない場合は、カスタム画像を表示します。イメージがWebサイトに見つかったかどうかを確認するには?

私が持っている私のビューファイルで、ウェブサイトに関連favicon.ico画像を取得するために:

web_site.link値は以下のようなものです
image_tag "#{web_site.link}/favicon.ico", :size => "16x16" 

:どのように

http://stackoverflow.com/ 
http://www.stackoverflow.com/ 
http://facebook.com/ 
... 

Webサイトで画像が見つかったかどうか確認してください(おそらくif ... else ... endステートメントを使用するか、またはfavicon画像を処理する前にHTTPリクエストを実行しています)と処理方法上記のシナリオ?

答えて

6

元の質問にあったアイデアを実装する方法は次のとおりです。

このアプローチの問題は、あなたの応答時間には、他のドメインがあなたの画像要求に応答するのに時間がかかります。そのサイトに の問題がある場合は、リクエストがタイムアウトするまでページが読み込まれません。

<% 
img_url = 'http://adomain.com/image.jpg' 
res = Net::HTTP.get_response(URI.parse(img_url)) 
img_url = '[my alternate url]' unless res.code.to_i >= 200 && res.code.to_i < 400 #good codes will be betweem 200 - 399 
%> 

<%=image_tag img_url%> 

jQueryのアプローチはもう少し複雑です。

  • 成功コールバックで遠隔画像
    • ため$.ajaxコールを実行し、ページのJavaScriptで透明スペーサーイメージ
    • <img>タグを作成して置き換えます。私は、次のように沿って何かをお勧めしたいです<img>のsrcとリモート画像のURL
    • のエラーコールバックで、<img>のsrcを代替画像のURLに置き換えます。

残念ながら、私はこの時点で正確なコードを生成する時間がありません。

+0

"残念ながら、私は今すぐこのコードを生成する時間がありません。" : ' - (...私は自分自身を試してみます... – Backo

+0

ここで 'to_f'を使う理由は?ステータスコードはintではなくfloatですか? – new2cpp

+0

@ new2cppなぜ' to_f'応答 –

-1

ページをレンダリングする前にイメージサーバー側をフェッチしない限り、これをRailsで行うことはできません。あなたができることは、クライアントでJavaScriptを使用して取得し、取得に問題がある場合は代替方法に切り替えます。

+0

jQuery 1.6を使用してJavaScriptを使用してページをレンダリングする前に、イメージをサーバー側で取得するにはどうすればよいですか? – Backo

+0

あなたは両方の点でオプションがありますが、[curb](http://curb.rubyforge.org/)の宝石が最適なオプションかもしれません。また、JavaScriptを使用してサーバーサイド*または*クライアントサイドをダウンロードすることもできますが、両方をダウンロードすることはできません。誰かがリンクの動作を確認する必要があるだけで、誰を選ぶ必要があります。このサーバー側をやっているのであれば、マッピングテーブルを作成するバックグラウンドプロセスとして実行することをお勧めします。 – tadman

+0

Rubyの標準ライブラリではなく、「縁石」宝石を使うのはなぜ私にアドバイスしますか? – Backo

関連する問題