Почему Firefox запрашивает фиктивный URL из IMG src в коде JavaScript? - PullRequest
4 голосов
/ 17 февраля 2010

Я получаю странные 404 ошибки на своем сайте по следующему URL:

GET /%27%20+%20item.icon%20+%20%27 HTTP/1.1

У меня есть соответствующий код в моем HTML-файле:

<script type="text/javascript">
  function foo(item) {
     return '<img src="' + item.icon + '">' : '';
  }
</script>

Кажется,исходить из FireFox 3.5 / 3.6 только для Windows, но я не могу этого гарантировать.

Итак, почему FF запрашивает этот URL?Это пытается предварительно загрузить изображения или что-то?Любые предложения о том, как это остановить?

Ответы [ 3 ]

6 голосов
/ 17 февраля 2010

Firefox интерпретирует ваш код как XHTML. Попробуйте поместить свой код в секцию CDATA следующим образом:

<script type="text/javascript">
//<![CDATA[
  function foo(item) {
   return '<img src="' + item.icon + '">' : '';
  }
//]]>
</script>

См. на этой странице , чтобы немного больше узнать об этой проблеме.

2 голосов
/ 16 марта 2010

У меня такая же проблема .

Я могу подтвердить, что это происходит и с Mac FF 3.6. Это только 3,6. Похоже, что даже 3,7 альфы работают, по словам некоторых людей из IRC, которые я пробовал.

Я также могу подтвердить, что трюк с CDATA не сработал; Я перепробовал много вариантов. Я также пробовал разные DOCTYPES и т. Д.

У меня тоже есть ужасное время для воспроизведения. Это происходит только примерно в 30% случаев, когда я загружаю эту страницу, даже если я делаю одни и те же шаги каждый раз, когда очищаю кеш, перезагружаю FF и т. Д. Это определенно ошибка. Я не могу создать простой тестовый пример, который тоже работает. Условия срабатывания для этого должны быть довольно сложными.

Однако мне посчастливилось исправить это. Ключ, кажется, в том, чтобы убить src=. Так, например:

var someHTML = '<img src="' + item.url + '" />';

становится:

var someHTML = '<img s'+'rc="' + item.url + '" />';

Пока что это, кажется, помогает, но это не было достаточно долго для меня, чтобы быть уверенным.

Эта проблема особенно коварна в моем случае; У меня есть строка JSON, содержащая 20 URL-адресов, и FF 3.6 запрашивает все 20 URL-адресов (которые являются поддельными, но в итоге попадают на одну и ту же страницу) в течение доли секунды, а DoS - сервер каждый раз, когда кто-то с FF 3.6 посещает мой сайт.

Это очень плохая ошибка в FF. Я думаю, что многим веб-мастерам еще даже предстоит обнаружить, что это происходит, но я предполагаю, что это вызывает широко распространенные проблемы.

1 голос
/ 18 февраля 2010

Хорошо, получается, что использование раздела CDATA в конце концов не помогло. Исправлено путем перемещения функции в отдельный файл скрипта .js.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...