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