1

私は現在、Rails バックエンドを備えた jQM サイトに取り組んでいます。私たちが使用するいくつかのページは、AWS S3 からユーザーがアップロードした HTML を読み取り、Rails メソッド「html_safe」を使用して HTML をレンダリングしています。これはうまく機能しますが、html に相対パス名を持つファイルへの参照が含まれている場合、それらは S3 から取得する必要があるため、もちろん表示されません。

したがって、これらの相対パス名がアセットを取得できるように、base タグを変更する必要があります。Navmodel の jQM ドキュメントを読みましたが、JavaScript に詳しくなく、*BaseURL メソッドを使用して目標を達成できるかどうかわかりません。

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

4

1 に答える 1

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>
于 2012-05-11T21:45:02.653 に答える