2012-05-11 1 views
1

私は現在、Railsのバックエンドを持つjQMサイトで作業しています。私たちが使用するページのいくつかは、AWS S3からユーザーがアップロードしたHTMLを読み込み、htmlをレンダリングするための 'html_safe'メソッドを使用しています。これはうまくいくが、htmlに相対パス名を持つファイルへの参照があれば、それらはS3から取得する必要があるため、表示されない。普通のHTMLで読むときのベースタグを無効にする

私がやってみたいのは、これらの相対パス名が資産を取得できるようにベースタグを変更することです。 NavmodelでjQMドキュメントを読んだことがありますが、私はJavaScriptに精通していないので、目標を達成するために* BaseURLメソッドを使用できるかどうかはわかりません。

誰でも解決策がありますか?アドバイスをいただければ幸いです。ありがとう!

答えて

1

<base>タグは動作しますが、仕様によってはページ全体に適用されます。これはページ上の他の相対URLを破損します。

他のすべてのURLが絶対的なものであることを確認したくない場合は、おそらくNokogiriを使用してこれらのURLを変換することです。例えば。

require 'uri' 
require 'nokogiri' 

base_uri = URI 'http://example.com/' 

html = %{ <!DOCTYPE html> 
      <html><body> 
      <ul> 
      <li><a href="/some_relative_url.html">Relative</a></li> 
      <li><a href="http://stackoverflow.com/">Absolute</a></li> 
      <li><img src="/a_relative_image.png" /></li> 
      </ul> 
      </body></html> 
     } 

doc = Nokogiri::HTML html 

attrs = %w(@href @src) 

doc.search(*attrs).each do |attr| 
    path = URI attr 

    attr.value = (base_uri + path).to_s unless path.absolute? 
end 

puts doc 
# => <!DOCTYPE html> 
# <html><body> 
# <ul> 
#  <li><a href="http://example.com/some_relative_url.html">Relative</a></li> 
#  <li><a href="http://stackoverflow.com/">Absolute</a></li> 
#  <li><img src="http://example.com/a_relative_image.png" /></li> 
# </ul> 
# </body></html> 
+0

Beautiful。私は間違いなくこれを試してみます。ありがとう。 – Gowiem

+0

これはうまくいった!ありがとう! – Gowiem

関連する問題