2012-05-11 60 views
1

我目前正在使用Rails後端工作在jQM網站上。我們使用的幾個頁面是從AWS S3上讀取用戶上傳的HTML,並使用rails方法'html_safe'來呈現html。這很好,但如果html有相對路徑名稱的文件的任何引用,他們當然不會顯示,因爲它們需要從S3中抓取。以純HTML格式閱讀時覆蓋基本標記

因此,我期望做的是更改基本標記,以便這些相對路徑名稱可以獲取其資產。我已閱讀Navmodel上的jQM文檔,但我不熟悉JavaScript,不確定是否可以使用* BaseURL方法來完成我的目標。

任何人都有可能的解決方案?任何意見將不勝感激。謝謝!

回答

1

<base>標記可以工作,但根據規範它適用於整個頁面 - 這將打破頁面上的任何其他相對URL。

如果您不想確保所有其他網址都是絕對的,則可能會使用Nokogiri轉換這些網址。例如。

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

美麗。我一定會試試這個。謝謝。 – Gowiem

+0

這工作非常棒!謝謝! – Gowiem