Может ли определенный PHP обслуживаться в зависимости от того, включен ли JavaScript? - PullRequest
1 голос
/ 12 июля 2011

Я пытаюсь создать одну страницу, которая обслуживает разметку в зависимости от того, включен JS или нет.Моя идея состоит в том, чтобы базовая группа контента обслуживалась при начальной загрузке страницы.Во время загрузки страницы также будет присутствовать некоторая функция javascript, которая отправляет ajax-вызов на сервер с данными постов, сообщая серверу, что javascript включен.По завершении вызова ajax страница обновлялась / обслуживалась снова с использованием данных публикации, чтобы знать, что JS включен, и обслуживать базовый контент вместе с контентом, включенным JS.Моя цель - сделать это как можно более плавным.

* Редактировать: я должен добавить, что я хотел бы сохранить одну страницу.Таким образом, страница будет просто обновлена ​​с содержанием JS.Не перенаправлять на новую страницу.

Мой вопрос двоякий, возможно ли это, если да, могу ли я получить какое-то руководство по коду, необходимому для этого?

Ответы [ 4 ]

3 голосов
/ 12 июля 2011

Что вы хотите сделать, это загрузить разметку «non javascript» внутри контейнера, например, <div id="container"> DEFAULT/FALLBACK MARKUP HERE </div>.Затем, когда документ готов, выполните ajax-вызов, чтобы получить разметку «javascript enabled» и заполнить ею элемент #container.Заполняется только в том случае, если включен JavaScript:)

Пример:

$(function(){

    $.ajax({
        url:'/javascript_enabled_html.php',
        dataType:'html',
        /* set your other params...*/
        success:function(data){
            $('#container').html(data);
        }
    });
});
2 голосов
/ 12 июля 2011

Вы не можете сделать это за один шаг, но если вы не возражаете против промежуточной страницы, вы можете получить что-то вроде:

<noscript>
   <img src="js-is-disabled.php" />
</noscript>

и

JS-это-disabled.php:

<?php
session_start();
$_SESSION['js_is_off'] = true;

Преимущество в том, что он работает в любом браузере, в котором отключен JS, при условии, что он достаточно современный, чтобы распознавать тег <noscript>.

Альтернативой является использование небольшого фрагмента JS для запуска AJAX-запроса на вызов сценария, который помечает JS как доступный в сеансе. Это может быть немного более надежно, так как это произойдет только в том случае, если JS работает правильно.

2 голосов
/ 12 июля 2011

Серверные сценарии не имеют доступа к этой информации, поскольку она не передается с заголовками HTTP. интересное решение, которое я только что нашел , состояло бы в том, чтобы иметь две страницы. Первый из них имеет перенаправление на второй странице с помощью JavaScript. Поэтому, если они попадают на вторую страницу, вы знаете, что у них включен JavaScript.

Другое решение основано на недопустимом HTML и может работать не во всех браузерах. Используйте тег <noscript> и поместите в него элемент метаобновления, например:

<noscript>
   <meta http-equiv="refresh" content="0; url=http://example.com/nojavascript.php">
</noscript>

Затем сделайте еще одно перенаправление, которое запускается при загрузке в javascript и указывает на страницу javascript. Если он идет в nojavascript.php, у них не включен js, если он идет во второй, они делают.

Но я бы просто предположил, что они не включили его, если они не будут перенаправлены js, и соответственно построил бы первую страницу.

0 голосов
/ 13 июля 2011

Может, но не должно. Единственная страница, которую вы должны обслуживать при условии, что JS - это страницы, которые называются Ajax.

И если вам действительно нужно знать (что обычно не должно происходить), вы должны предполагать, что JS выключен, пока не получите информацию о том, что он включен.

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