У меня есть приложение, которое содержит простые html-страницы для людей. Некоторые из которых используют таблицы для оформления макета. (Не я, клянусь!) По какой-то таинственной причине, рендер ломает эти макеты в Internet Explorer.
Вот самый простой способ воспроизвести проблему.
Когда я сохраняю html-файл в public / и получаю к нему доступ через Mongrel, он прекрасно работает во всех браузерах. Если я использую следующий код для рендеринга файла, он становится прикольным:
render :file => '[app_directory]/public/sample.html'
Internet Explorer создает пустой текстовый узел для каждой новой строки, что приводит к пробелам в таблице. Необработанный html, по-видимому, идентичен , но при использовании с рендерингом он каким-то образом изменяется таким образом, что делает Internet Explorer несчастным.
Я был бы ужасно благодарен за любые указания о том, как это остановить. Спасибо!
Редактировать 1: Тайна углубляется ...
Я понял, как заставить Chrome иметь ту же ошибку. Вот код, который работает в Chrome и не работает в IE:
# tab_controller.rb
render :inline => tab.public_html
Но когда я изменяю это, чтобы использовать внешний шаблон ERB, странный пробел также появляется в Chrome:
# tab_controller.rb
@html = tab.public_html
render 'show'
# show.erb
<%=raw @html %>
Я уверен, что этому есть объяснение, но чем больше я копаю незнакомца, тем больше оно получает.
Редактировать 2: Заголовки
Вот заголовки ответа, которые IE дает для статически обслуживаемого файла:
Response HTTP/1.1 200 OK
Connection close
Date Fri, 05 Aug 2011 00:33:20 GMT
Last-Modified Thu, 04 Aug 2011 23:38:21 GMT
Content-Type text/html
Content-Length 913
А вот заголовки ответа, которые IE дает для контента, создаваемого с помощью render. Содержание, которое имеет проблемы:
Response HTTP/1.1 200 OK
Connection close
Date Fri, 05 Aug 2011 00:28:18 GMT
Content-Type Text/html
X-UA-Compatible IE=Edge
ETag "43d392ddbbcf3856ced3de672005c26f"
Cache-Control max-age=0, private, must-revalidate
Set-Cookie _rails_static_html_session=[session stuff]; path=/; HttpOnly
X-Runtime 31.964569
Transfer-Encoding chunked
Редактировать 3: Код
Вы можете (я надеюсь) воспроизвести проблему, поместив следующий код в любой произвольный контроллер:
html = "<html>\n<head>\n</head>\n\n<body>\n<table width='520' height='870' border='0' cellpadding='0' cellspacing='0'>\n <tr>\n <td align='center' valign='top'><div align='center'>\n <table width='520' border='0' cellspacing='0' cellpadding='0'>\n <tr>\n <td><img src='.' width='520' height='314' /></td>\n </tr>\n <tr>\n <td><img src='.' width='520' height='320' /></td>\n </tr>\n <tr>\n <td><img src='.' width='520' height='166' /></td>\n </tr>\n <tr>\n </tr>\n </table>\n </div></td>\n </tr>\n</table>\n</body>\n</html>"
render :inline => html
File.open('/railsappdirectory/public/sample_html.html', 'w') {|f| f.write(html) }
Когда вы обращаетесь к нему через Internet Explorer через приложение rails, между изображениями будут пропуски. Когда вы просматриваете html-файл как статический ресурс, пропусков не будет.