У меня есть веб-приложение, которое загружает произвольную страницу или файл в 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 с готовыми настройками?