2010-04-13 2 views
0

Когда я использую условную инструкцию, ориентированную на IE6 и ниже, с некоторым кодом PHP, Google Chrome игнорирует утверждение и вставляет код.Условные ошибки в Google Chrome

Пример:

<!--[if lte IE 6]> 
<?php require_once("ie6.php"); ?> 
<![endif]--> 

Это будет вставлять содержание ie6.php в организме в любом случае.

код в ie6.php что-то вроде этого:

<?php print '<p>This is IE6</p>'; ?> 

Кто-нибудь получил эту проблему раньше?

+0

собирается должны знать, что 'ie6.php' есть и какой код идет haywire. – Earlz

+0

Но разве он не должен вставлять какой-либо код, если это IE6 или ниже? – UXTE

+0

Я предполагаю, что если ie6.php не генерирует как часть его вывода. –

ответ

0

Проблема заключалась в том, что внутри html-кода в ie6.php был еще один комментарий, и Chrome это не понравилось.

Что-то вроде этого:

<?php print '<p>This is IE6 <!--a comment--> </p>'; ?> 

кажется Chrome интерпретировал комментарий закрывающий тег как конечный тег, а затем «неправильное» условное выражение.

1

Код PHP вставлен перед тем, как утверждение if всегда рассматривается, поэтому оно всегда будет там.

  1. Сервер анализирует страницу и делает какой-либо код PHP
  2. Визуализированное HTML, в том числе содержания ie6.php, отправляются в браузер
  3. Браузера видит Г IE 6 условных и принимает меры
3

PHP напечатает <!--[if lte IE 6]>, затем включит файл «ie6.php», а затем напечатает <![endif]--> , потому что это именно то, что вы говорите ему.

Вы путаете, какие строки кода запускаются сервером и которые анализируются браузером.

Chrome игнорирует строки, такие как <!--[if lte IE 6]>, потому что они предназначены только для браузеров IE.

+0

Да, я знаю, что ... проблема в том, что Chrome показывал, что напечатано внутри условных операторов. Во всяком случае, я понял проблему ниже. – UXTE

1

Браузеры - единственное, что использует условные утверждения.

Поскольку PHP запускается на сервере, а затем результирующая страница отправляется в браузер, условия IE не работают.

0

Этот код php будет включен всегда на стороне сервера (независимо от браузера).

Насколько я знаю, условные комментарии работают на стороне клиента и в браузере не должны их уважать (я не помню подробностей, но я где-то читал, что браузер может делать все, что захочет, с комментариями HTML, даже разрезать их так что люди, которые вставляют javascript, могут быть удивлены).

Если вы хотите решить, включать ли файл или нет, используйте некоторое обнаружение браузера: $ _SERVER ['HTTP_USER_AGENT'] или get_browser() было бы хорошим местом для начала.

0

У меня была аналогичная проблема с хромом

<!--[if IE]> 

    <!-- a comment about my code --> 
    doIEstuff 

<![endif]--> 

Комментарий внутри условный комментарий был штраф для FF и IE, но он сделал хром выполнить код внутри условного комментария