Запретить браузеру запрашивать загрузку файла при открытии файла CSS в iFrame? - PullRequest
2 голосов
/ 04 февраля 2010

У меня есть веб-приложение, которое загружает произвольную страницу или файл в iFrame.

В некоторых браузерах, когда указатель src iFrame на файл css, вместо отображения текста css, появляется «загрузка /Появится приглашение «открыть файл».

Есть ли способ предотвратить это?Я понимаю действительные причины безопасности для того, чтобы не загружать и не открывать нетекстовые файлы по умолчанию, но файл CSS или любой тип текста / * должен быть достаточно безопасным (на самом деле безопаснее, чем HTML!)

Файл CSSЗаголовок ответа выглядит следующим образом:

Content-Type: text/css; charset=utf-8
Status: 304 Not Modified
X-Powered-By: Phusion Passenger (mod_rails/mod_rack) 2.2.4
Etag: "34b924980254e212b651bcae25da011e"
Last-Modified: Thu, 04 Feb 2010 11:01:59 GMT
X-Runtime: 0.11366
Server: nginx/0.7.62 + Phusion Passenger 2.2.4 (mod_rails/mod_rack)
Content-Encoding: gzip

200 OK

Теперь я знаю, что мог бы использовать XHR вместо iFrame, чтобы получить текст и затем отобразить его, но в этом приложении содержимое может быть любым, определяемымпользователь, во время выполнения, а не предопределенный набор страниц / файлов.И он должен быть в iFrame, а не загружать ответ XHR в div в родительском окне, поскольку загруженная страница может иметь некоторый JavaScript, который зависит от правильной строки местоположения (такой как аналитика, реклама, системы блогов / комментариев на основе JavaScript)и т. д.).

Другим другим вариантом будет XHR для определения типа файла, затем

  • установить атрибут src для iFrame, если это HTML, или
  • copyсодержимое ответа в iFrame, если это обычный текст
  • ничего не делать, если двоичный файл

Проблема с этим решением заключается в том, что в первом случае мне нужно было бы отправитьдва запроса, а не только один.Преимущество состоит в том, что я могу полностью игнорировать двоичные файлы, хотя в этом приложении сомнительно, что пользователь будет пытаться загрузить в кадр что-либо, кроме HTML или другой простой текстовой страницы.

Я почти уверенне будет простого решения (если оно вообще есть), но лучше спросить нельзя, чем здесь, поэтому .....

Редактировать 12 февраля 2010 г .:

Из-за отсутствия ответов я предполагаю, что мое первоначальное предположение верно (нет способа сделать это, если оно вообще существует), поэтому единственными решениями являются либо полное игнорирование проблемы (не идеальное), либоиспользуйте мой предложенный метод XHR, чтобы определить тип ответа и загружать только во фрейм, если HTML.Опять же, это не идеально, но если бы браузер кэшировал ответ XHR, это немного улучшило бы ситуацию, поэтому:

Кто-нибудь знает, будет ли браузер обычно кэшировать ответ XHR, поэтому, если бы тот же URL былвпоследствии загруженный в IFRAME, будет использоваться кэшированная версия?Я понимаю, что это зависит от браузера и настроек, но будут ли это делать, например, IE и Firefox с готовыми настройками?

Ответы [ 2 ]

0 голосов
/ 12 февраля 2010

В вашем веб-приложении может быть страница (на любом языке, который вы используете, при условии, что вы не обслуживаете только статические файлы), которая принимает параметр, представляющий собой путь к файлу, который вы хотите просмотреть, а затемзагрузить это в IFRAME

Поэтому вместо того, чтобы устанавливать для IFRAMEs src значение «somefile.css» (или любого другого файла), установите для src значение «FileViewer.php? filepath = / somefile.css» (замените)..php с выбранным языком), а затем заставьте страницу FileViewer загрузить файл из файловой системы и отобразить его, но с набором Content-Type.

0 голосов
/ 04 февраля 2010

Для дословного отображения файла в виде простого текста я просто отправил бы его как

Content-Type: text/plain; charset=utf-8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...