PHP: как определить, поддерживает ли браузер JavaScript в PHP? - PullRequest
5 голосов
/ 16 ноября 2010

Я создаю сайт с глубокими связями AJAX.

Я хочу, чтобы PHP загружал весь HTML-код страницы, если пользователь пытается получить доступ к сайту через браузер, не поддерживаемый Javascript, или если это поисковый сканер. В основном PHP вернет всю страницу.

Напротив, когда пользователь пытается получить доступ к сайту с помощью браузера, поддерживаемого Javascript, я хочу, чтобы PHP возвращал только код шаблона, и пусть Javascript (AJAX) позаботится обо всем остальном. В основном PHP будет загружать только элементы дизайна и позволять Javascript заполнять их контентом.

Я изучил функцию PHP get_browser(), но, похоже, это не такой надежный инструмент. Какова отраслевая практика, если браузер поддерживает Javascript или это поисковый сканер, использующий PHP?


Фон

Почему я хочу, чтобы сайт имел такое поведение.

Поскольку я хочу, чтобы домашняя страница загружалась только путем загрузки адреса: example.com, который не отправляет запрос в PHP, PHP возвращает HTML-код домашней страницы. Это, однако, вызывает проблемы, когда пользователь пытается загрузить следующую страницу: example.com#foo. Так, в этом примере PHP вернет домашнюю страницу, и как только домашняя страница будет загружена, Javascript (AJAX) изменит содержимое так, чтобы оно показывало правильный контент для #foo. Это заставит пользователя видеть домашнюю страницу, поэтому время загрузки будет медленнее, а взаимодействие с пользователем не будет таким приятным. Однако, если мой PHP-скрипт может выяснить, что, если браузер использует загрузку, поддерживаемую Javascript, пытается загрузить страницу, он вернет только шаблон веб-сайта, на котором нет содержимого), и javascript заполнит этот шаблон содержимым, каким бы оно ни было должен отображаться для #foo. С другой стороны, если неразделенный браузер или сканер Javascript попытается получить доступ к странице example.com#foo, будет возвращена домашняя страница.

Я использую SWFaddress (http://www.asual.com/swfaddress/) библиотека для глубокой связи.


Редактировать

Спасибо, ребята. Я не думал об использовании <noscript></noscript> раньше.

Вот что я решил сделать. PHP по умолчанию загружает такие страницы, как example.com или example.com#foo (что, по сути, совпадает с example.com с точки зрения PHP, поскольку фрагменты по определению не отправляются на сервер), пустым (только визуальный шаблон) с <noscript> тег внутри для содержимого домашней страницы. Таким образом, пользователи с javascript не увидят домашнюю страницу, а AJAX заполнит содержимое страницы в соответствии с фрагментом #foo. С другой стороны, поисковые роботы и пользователи без javascript увидят домашнюю страницу.

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

Ответы [ 5 ]

5 голосов
/ 16 ноября 2010

Вы не можете сделать это с помощью PHP.Однако вы можете использовать тег noscript для перенаправления на другую страницу php, если у них нет javascript:

<noscript>
<meta http-equiv="refresh" content="0; URL=nojavascript.php">
</noscript>
1 голос
/ 16 ноября 2010

Вы можете включить ссылку в некоторые теги <NOSCRIPT>, указывающие пользователю что-то вроде example.com#foo?javascript=disabled.

К сожалению, браузеры не сообщают, включен JS или нет, поэтому нет способа узнатьиз простого HTTP GET, следует ли отправлять JS-зависимые страницы.

1 голос
/ 16 ноября 2010

Невозможно сделать это так, как вы пытаетесь это сделать.

Редко когда кто-то выключил JS и не знает об этом.

PHP не получает ничего после #, только javascript может с этим что-нибудь сделать. Поэтому, даже если PHP сможет определить, включен ли в браузере javascript, он все равно не сможет прочитать #.

0 голосов
/ 16 ноября 2010

Вместо того, чтобы сервер пытался прослушать наши пользовательские настройки, как насчет использования ненавязчивого javascript в первую очередь? Таким образом, страница будет изящно ухудшаться (до желаемого состояния), если JS недоступен.

0 голосов
/ 16 ноября 2010

Вам нужно просто создать запрос AJAX, который устанавливает переменную сеанса для включенного javascript.

Запустите этот запрос AJAX перед загрузкой любой другой информации на сайте, а затем выполните простое перенаправление на реальный сайт.

Вы можете сделать что-то вроде этого псевдокода:

Index.php:

ajax(check_js.php);
redirect(main_page.php);

check_js.php

$_SESSION['js_enable'] = true;

main_page.php

if($_SESSION['js_enable'] == true) {
  //execute page
} else {
  header("Location: no_js_error.php");
}
...