Rails для чтения и рендеринга отдельного HTML-документа, нужно <base> применять только для чтения в HTML
Я пишу мобильное веб-приложение с использованием Rails и jQuery mobile. Я читаю все свои данные во время выполнения из Amazon AWS S3, используя HTTParty.
Один из экранов, который мне нужен для рендеринга - это просто прямой HTML, который может и обычно имеет встроенные изображения, которые размещены в той же папке на S3. Вот где моя проблема. Я могу легко получить html с помощью HTTParty и использовать опцию html_safe для его рендеринга, но изображения не отображаются, поскольку они являются относительными путями. Поэтому я пытался найти способ обойти это.
Я пробовал несколько вещей, но я в основном искал использование HTML-тега, чтобы изображения указывали на правильное местоположение. Проблема в том, что я не могу указать базовый тег, а затем иметь другие ссылки на странице, потому что они тогда используют ту же самую базу, и ссылки не указывают на правильное местоположение. Поэтому я посмотрел на наборы кадров и фрейм и указал базовый тег только на фрейм, который, как мне кажется, я использовал правильно, но безрезультатно. Я пытался использовать, но безрезультатно.
Таким образом, в основном я ищу способ, которым я мог бы установить базу для относительных имен путей в html-строке, которую я прочитал с S3, если это не было ясно. Я открыт для любых предложений! И заранее спасибо за то, что даже прочитали и попытаетесь решить эту очень специфическую проблему!
Да, и еще одна вещь, когда я смотрю на страницу с Firebug, первая строка в заголовке - это базовый тег с href, установленным для текущей страницы. Я не могу выяснить, откуда это исходит, но я предполагаю, что рельсы бросают это туда? Я не знаю, имеет ли это значение, так как я поместил под ним еще один базовый тег с помощью yield:intro_base? Или это одна из моих проблем, потому что там есть конфликт?
А потом был код: Мой метод "вступления":
def intro
@intros = []
@app_config.intro_screens.each do |intro_screen|
intro_screen_response =
ApplicationController.get("#{@diandr_url}/#{intro_screen['filename']}.html")
@intros << intro_screen_response.body
end
@intros.reverse!
@intros_length = @intros.length
respond_to do |format|
format.html
end
end
Мой файл intro.html.erb:
<% page_num = params[:id].to_i %>
<% content_for :intro_base do %>
<base href="https://s3.amazonaws.com/our_bucket_name<%=@dir_url%>/" target="intro" />
<% end %>
<% content_for :mobile_header do %>
*some jQuery mobile paging and header stuff is in here, shouldn't matter*
<% end %>
<% content_for :mobile_content do %>
<!-- <iframe src=<%= @intros[page_num] %> height="100%" width="100%"> -->
<!-- <p> This browser does not support iframes </p> -->
<!-- </iframe> -->
<frameset cols="100%">
<frame name="intro" <%= @intros[page_num].html_safe %>
</frameset>
<% end %>
Заголовок моего макета:
<head>
<title> our Mobile App </title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- These are the jQuery Mobile scripts -->
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.css" />
<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
<script type="text/javascript" src="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.js">
</script>
<%= yield :intro_base %>
<%= stylesheet_link_tag "master" %>
<%= javascript_include_tag :defaults %>
<%= csrf_meta_tag %>