#javascript #internet-explorer
#javascript #internet-explorer
Вопрос:
Мы разрабатываем приложение Ruby on Rails. Недавно мы повторно развернули это приложение за прокси-сервером Apache, который использует HTTPS.
Поскольку мы сделали это, один из наших пользователей отправляется на следующую страницу при попытке использовать приложение:http://shell.windows.com/fileassoc/mimeassoc.asp?mime=text/javascript, в котором говорится:
MIME Type: text/javascript
Description: UnKnown
Windows does not recognize this MIME type.
Кто-нибудь знает, при каких обстоятельствах IE утверждал бы, что не знает, что делать с text/javascript
файлом? Пока это только один пользователь.
Windows 7 / IE 8 и XPsp2 / IE8
РЕДАКТИРОВАТЬ, добавляя полный HTTP-ответ, который IE выдает
HTTP/1.1 200 OK
Date: Mon, 24 Oct 2011 00:31:27 GMT
Server: Apache/2.2.3 (CentOS)
X-Powered-By: Phusion Passenger (mod_rails/mod_rack) 3.0.9
ETag: "a6d7d64e3ca943eabc73db920baa7d76"
Cache-Control: max-age=0, private, must-revalidate
X-UA-Compatible: IE=Edge,chrome=1
X-Runtime: 0.003257
Status: 200
Content-Type: text/javascript; charset=utf-8
Connection: close
window.location.href='https://xx.xx.org.au/AED/sessions/new'
Комментарии:
1. пользователь обращается к URL-адресу через https… есть ли какие-либо предупреждающие сообщения, такие как «загрузка, некоторые ресурсы не защищены»… загруженный через http, который пользователь, возможно, нажал «нет»?
2. Просто для пинки удалите все ваши заголовки, кроме
Content-Type
. (Вы можете использовать Fiddler < fiddler2.com/fiddler2 > установить точку останова при загрузке и удалить их без изменения конфигурации вашего сайта или сервера.) Давайте убедимся, что один из других заголовков не приводит к путанице. Если это не сработает, попробуйте удалить объявление charset.3. Какие панели инструментов IE установлены вашим пользователем?
Ответ №1:
Вы должны попробовать application/javascript
.
Комментарии:
1. согласно Википедии, IE с 6 по 8 не распознают этот en.wikipedia.org/wiki/Client-side_JavaScript
2. согласно его собственному ответу, это не было связано с тем, что «текст / javascript» не был распознан. ‘application / javascript’ не является правильным ответом, поскольку некоторые версии IE могут не распознавать мой предыдущий комментарий.
3. Я отклонил ваш ответ, а затем отменил отзыв позже, поскольку мне очень не нравится, когда меня отвергают за попытку помочь с запутанными или сложными вопросами. в любом случае, это неправильный ответ.
Ответ №2:
ОК. Похоже, мы с этим разобрались. Это была ошибка в нашем приложении, из-за которой он отправил в браузер какой-то недопустимый JavaScript. Кажется, Rails обрабатывает перенаправления не прошедших проверку подлинности сеансов на страницу входа, отправляя небольшой фрагмент JS, который выглядит следующим образом:
window.location.href='https://blah.blah.org.au/APP/sessions/new'
У нас была опечатка в ERB для этого файла, из-за которой он отправил это вместо:
' %>
window.location.href='https://blah.blah.org.au/APP/sessions/new'
Интересно то, что только некоторые версии IE путаются в этом.
Комментарии:
1. Похоже, я говорил слишком рано — Javascript прямо сейчас, но мы все еще получаем ошибку на паре компьютеров XP / IE8.
Ответ №3:
IE должен распознавать text / javascript (см., Например, там упоминается ‘text / javascript’). Должны быть задействованы другие факторы. Вы можете попробовать:
(1) вы можете указать тип непосредственно в теге script
<script type="text/javascript" src="..."></script>
(2) Поступает ли javascript с того же сайта с тем же протоколом? Пользователь может блокировать незащищенный контент при поступлении с незащищенного адреса, и IE может просто выдать вам вводящее в заблуждение сообщение об ошибке.
(3) Поскольку вы сейчас находитесь за apache, есть ли какие-либо другие заголовки, которые могут сбивать IE с толку?
(4) Бьюсь об заклад, вы проверили, что Rails устанавливает правильное местоположение для ресурсов (т. Е. Он использует прокси-сервер apache, а не rails).
Ответ №4:
указывают ли заголовки http-ответа X-Content-Type-Options: nosniff? если это так, ie9 не будет выполнять какой-либо скрипт, пока вы этого не сделаете
Ответ №5:
Я подозреваю, что ваше содержимое javascript либо неверно, либо просто неправильно «IE». 🙂
Прежде всего, если вы указываете его UTF-8, вы уверены, что это то, что вы обслуживаете? В соответствии с советом Брэда удалите определение кодировки и посмотрите, изменится ли поведение.
Также возьмите копию возвращаемого javascript и попробуйте где-нибудь ее проверить. Я видел, как другие сообщали о проблемах, когда javascript был поврежден определенными конкретными способами, что приводило к сбою только определенных версий IE. Вы объединяете несколько js-файлов или что-то в этом роде? Другой пример — случайный тег %> в вашем файле javascript, который может запутать некоторые браузеры.
Получая возвращаемое значение на стороне клиента с помощью firebug или Chrome developer tools, вы можете быть уверены, что прокси-сервер не искажает заголовки или кодировку (включая gzip).
Я также слышал, что некоторые старые версии IE неправильно обрабатывают mimetypes в iframes. Используете ли вы iframe вообще?
И последнее, но не менее важное: некоторые антивирусные программы / программы безопасности изменяют заголовки приема исходящего запроса (не очень приятно, не так ли?), Заставляя сервер думать, что браузер не поддерживает gzip или что-то в этом роде. Можете ли вы получить копию исходящего запроса для javascript? Вы хотите проверить наличие измененных заголовков запроса.
Комментарии:
1. Да. Я подозреваю, что IE выполняет некоторый синтаксический анализ возвращенного скрипта, чтобы попытаться определить, действительно ли это JS или нет, но я пока точно не знаю, что ему в этом не нравится.
Ответ №6:
Вы можете удалить type
атрибут script
тега. HTML5 этого не требует, и все браузеры понимают, что это «их местный вариант JavaScript», который вам нужен. Ваша страница не будет проверяться на соответствие типу документа HTML4, но пока вы знаете, почему он не проверяется, я думаю, что все в порядке. Важнее работать, чем проверять.
Комментарии:
1. Это не HTML-документ. У него нет ни типа содержимого,
text/html
ниdoctype
тега.