Ошибка условных операторов в Google Chrome - PullRequest
0 голосов
/ 14 апреля 2010

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

Пример:

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

Он все равно вставит содержимое ie6.php в тело.

Код в ie6.php выглядит примерно так:

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

Кто-нибудь сталкивался с этой проблемой раньше?

Ответы [ 6 ]

3 голосов
/ 14 апреля 2010

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

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

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

1 голос
/ 14 апреля 2010

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

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

1 голос
/ 14 апреля 2010

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

  1. Сервер оценивает страницу и отображает любой код PHP
  2. Рендеринг HTML, включая содержимое ie6.php, отправляется в браузер
  3. Браузер видит условную версию IE 6 и выполняет действие
0 голосов
/ 15 мая 2010

У меня была похожая проблема с хромом

<!--[if IE]>

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

<![endif]-->

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

0 голосов
/ 14 апреля 2010

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

Примерно так:

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

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

0 голосов
/ 14 апреля 2010

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

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

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

...