Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > включен ли javascript


Автор: alexey___ 27.7.2008, 00:08
Здравствуйте!

подскажите пожалуйста как в php проверить включин ли на клиенте javascript?

Автор: skyboy 27.7.2008, 00:12
никак. проверить конфигурацию клиента(в т.ч. настройки браузера) можно только на стороне клиента.
PHP выполняется на стороне сервера.

Автор: Dima 2015 27.7.2008, 01:06
Мне вот тут подумалось... Ну на прямую конечно никак.

Но можно сделать скрытое поле формы:

<input type="hidden" name="is_JS" value="0">

И ф-цию JS, которая меняет value с 0 на 1. Если JS работает то на сервер придет 1, если нет - то 0.

Или ерунду говорю? smile

*
Не, наверное ерунду... если JS выключен то кто эту форму отправлять то будет... 

Но во время авторизации скажем точно должно прокатить...

Автор: Dima 2015 27.7.2008, 03:10
В общем можно сделать изврат типа такого:

Приходит юзер на index.php и получает:

Код

<script>
function set_JS(){
    document.getElementById('JS_check').submit();
}

</script>

<form id="JS_check" action="init.php" method="POST">
<input id="is_JS" type="hidden" name="is_JS" value="0">
</form>

<script>
set_JS();
</script>

<noscript>
<META HTTP-EQUIV="Refresh" Content="1; URL=init.php"> 
</noscript>


Воть, а в init.php:

Код

<?php

if (isset($_POST['is_JS'])) {
    
    echo 'JS включен';

} else {
    echo 'JS выключен';
}
?>

Автор: bars80080 27.7.2008, 09:21
такой вопрос может возникнуть, если требуется отдать клиенту два разных типа страниц: с js и без js для тех у кого он отключён
самое простое в этом случае в начале страницы прописать:
Код

<script>
window.location.href = 'index1.php';
</script>
 дальше на странице разметка не содержащая javascript. если он включен то перебросит на другую страницу, где есть js

Автор: Feldmarschall 27.7.2008, 09:30
класс.
просто интересно, кто-нибудь из теоретиков такое сам делал, или хотя бы видел?
и еще очень забавно предположение о том, что пользователи на сайт заходят исключительно через индекс.

Автор: alexey___ 27.7.2008, 10:07
Задача решена, всем спасибо!

Прошу прощенья, что сразу не сказал, что нужно сделать!
Задача заключалась в следующем: 
1. Если есть javascript, то делаем меню с использованием javscript - меню и выпадающее подменю (2 уровня)
2. Если нет javascript, то делаем простое меню с использованием css - просто основное меню (1 уровень)
Данные для меню берутся БД

Задачу решил следующим образом:
для 2 между <noscript> поместил div в который помещается меню. 

для 1 сформировал строку (Меню) на php, которая включает в себя набор тегов

и потом вызвал следующее
Код

echo '<script language="javascript" type="text/javascript">';
echo '$("#mainMenuBox").html("' . $newText . '");';
echo '</script>';


т.е. если javascript включен, моё меню построится - поместится в div
иначе выполнится действие в <noscript>

Автор: bars80080 27.7.2008, 10:36
Цитата(Feldmarschall @  27.7.2008,  09:30 Найти цитируемый пост)
и еще очень забавно предположение о том, что пользователи на сайт заходят исключительно через индекс. 

ну, учитывая, что ты никак не расскажешь как же она выглядит "правильная" система построения сайта, все будут продолжать работать через индекс

Автор: Feldmarschall 27.7.2008, 16:00
alexey___, осталось только объяснить, какое этот вопрос имеет отношение к разделу PHP: Общие вопросы

Автор: skyboy 27.7.2008, 18:40
Feldmarschall, никакого, очевидно.
Но чтоб предотвратить появление хотя бы 1% вопросов из той же песочницы, я предпочтел бы эту тему оставить здесь.
тем более, в других разделах она не откроет ничего нового.

Автор: alexey___ 27.7.2008, 18:55
Feldmarschall. возможно никакого отношения нет! Но возникают вопросы о том как при загрузке php страницы обойти javascript.
Везде очень много красивого текста, красивых слов и т.д. Также видно, что существует много способов поверки "включен ли javascript" в броузере....
Если есть возможность дайте пожалуйста ссылки, где это можно почитать.

Автор: Feldmarschall 27.7.2008, 19:18
alexey___, я могу дать только ссылку, с помощью которой можно узнать, что такое РНР. Чтобы не возникало вопросов на тему, что он может, а что нет.

Автор: skyboy 27.7.2008, 19:31
alexey___, давай выясним раз и навсегда: PHP выполняетяся на стороне сервера. О клиенте он знает только то, что клиент сам "сообщит". Потому если тебя интересует что-то, работающее/отображающееся на стороне клиента - задай вопорс в разделе "Верстка" или "Javascript". Но не в "PHP: Общие вопросы"

Автор: alexey___ 27.7.2008, 19:48
skyboy, Feldmarschall
Спасибо, большое!

при решении данной проблемы я зациклился на php и думал решить эту задачу именно средствами php.

Но получив ответ от skyboy (27.7.2008, 00:12)
Цитата

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


и все вопосы у мення отпали. и я перестал решать задачу средставми php.
думаю, что не нужно было выкладывать свой вариант решения.

а если посмотреть все ответы данной темы, то можно будет увидеть что ответ в тему только один от skyboy

Всем большое спасибо!

Автор: Feldmarschall 27.7.2008, 20:42
Цитата(alexey___ @  27.7.2008,  19:48 Найти цитируемый пост)
ответ в тему только один от skyboy

Не стоило давать такие оценки. У тебя недостаточно опыта, чтобы судить о том, какой ответ в тему. А какой-нет.
К тому же, это форум. Не стоит его путать с платной службой поддержки, которая подписала контракт облуживать исключительно твою драгоценную персону. 
Это форум. И в него могут писать свободно все желающие. В меру своих способностей и понимания вопроса.
Оценивать лучше не ответы, а свои знания. Которые сильно нуждаются в улучшении.

Автор: alexey___ 27.7.2008, 21:40
что косается моих знаний, то они действительно нуждаются в улучшении - всего пару недель за php.

у меня вопрос! 
в интернете нашел, что при помощи функции get_browser() (нужно ещё правильно подключить файл browscap.ini) можно получить информацию и броузере клиента, также и том подключен ли javascript в броузере или нет.

правильно ли я понял действии этой функции? т.е для чего это всё используется?
как правильно подключить browscap.ini? 

Автор: Feldmarschall 27.7.2008, 22:53
Нельзя с её помощью получить такую информацию.
Что тебе уже несколько раз объяснили, и ты даже поблагодарил за объяснения. 

Автор: elkeeper 28.7.2008, 20:06
Цитата(alexey___ @ 27.7.2008,  21:40)
что косается моих знаний, то они действительно нуждаются в улучшении - всего пару недель за php.

у меня вопрос! 
в интернете нашел, что при помощи функции get_browser() (нужно ещё правильно подключить файл browscap.ini) можно получить информацию и броузере клиента, также и том подключен ли javascript в броузере или нет.

правильно ли я понял действии этой функции? т.е для чего это всё используется?
как правильно подключить browscap.ini?

Никого не слушай - функция правильная. То, что тебе тут несут (по другому не назвать), что мол нельзя пхп определить параметры браузера т.к. пхп - на сервере, а браузер - на клиенте - это полный бред и пляски с бубном. иди на http://ru2.php.net/manual/ru/function.get-browser.php - там по-компетентнее народ сидит. Настройка browscap.ini необходима, что бы вся эта канетель работала быстрее (здесь, видимо, имеется в виду настройка кэширования сего файла т.к. при вызове get_browser() она постоянно пробегает весь этот файл, выгружая его себе)

Для "профессионалов - программистов", которые тут постили про невозможность определения параметров браузера: По-мимо настроек сервера, переменных и пр. во все ваши пхп скрипты передаются переменные окружения (есть такой зверь - представляете!?), в которых есть куча настроек текущих параметров работы php (начиная со страниц, с которых пришел пользователь и заканчивая настройками Apache (или, в общем, веб-сервера)). И что самое интересное, в эти же переменные окружения передаются и параметры браузера. А вы думали клиент только получает от сервера? Нет, не только. И мало того - передаёт уйму информации о себе. (Источник - phpinfo();)

PS
Всё работает нормально и без настройки browscap.ini

PPS
Ради интереса - выгрузка сей функции
Исходник:
<?php
echo $_SERVER['HTTP_USER_AGENT'] . "\n\n";

$browser = get_browser(null, true);
print_r($browser);
?>

Результатом выполнения будет что-то подобное:

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040803 Firefox/0.9.3

Array
(
    [browser_name_regex] => ^mozilla/5\.0 (windows; .; windows nt 5\.1; .*rv:.*) gecko/.* firefox/0\.9.*$
    [browser_name_pattern] => Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:*) Gecko/* Firefox/0.9*
    [parent] => Firefox 0.9
    [platform] => WinXP
    [browser] => Firefox
    [version] => 0.9
    [majorver] => 0
    [minorver] => 9
    [css] => 2
    [frames] => 1
    [iframes] => 1
    [tables] => 1
    [cookies] => 1
    [backgroundsounds] =>
    [vbscript] =>
    [javascript] => 1
    [javaapplets] => 1
    [activexcontrols] =>
    [cdf] =>
    [aol] =>
    [beta] => 1
    [win16] =>
    [crawler] =>
    [stripper] =>
    [wap] =>
    [netclr] =>
)

Думаю, объяснять, что к чему, не надо...)

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

Автор: skyboy 28.7.2008, 20:46
elkeeper, и как get_browser() вернет информацию о том, включен ли javascript на стороне клиента?
до кучи: вот request headers, который мой mozilla firefox отправляет для получения одной из картинок при работе с этой конкретной страницей(дамп получен при помощи полезного во многих отношениях firebug):
Код

Host    nbimg.dt00.net
User-Agent    Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1
Accept    image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language    [B][/B]en-us,en;q=0.5
Accept-Encoding    gzip,deflate
Accept-Charset    ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive    [B][/B]300
Connection    keep-alive
Referer    http://forum.vingrad.ru/forum/topic-222194/unread-1.html

найди здесь "javascript: yes" или что-то аналогичное(сейчас я абсолютно умалкиваю о том, что всякие анонимайзерные плагины под разные браузеры искажают или вообще подавляют user-agent заголовки).
снизойди. пожалуйста, очень тебя прошу.

Добавлено через 2 минуты и 10 секунд
мысль мелкнула: а не путаешь ли ты, elkeeper, состояние javascript(включен/выключен - например, плагином "no script" или через настройки) и поддержку javascript(как, например, lynx не поддерживает или консольный terminal)?

Добавлено через 3 минуты и 11 секунд
Цитата(elkeeper @  28.7.2008,  19:06 Найти цитируемый пост)
во все ваши пхп скрипты передаются переменные окружения

правда?! 0_о

Добавлено через 6 минут и 33 секунды
alexey___, смотри, не ведись на эту провокацию. если не веришь нам, не верь ему - проверь сам и убедись, что со включенным javascript и выключенным возвращает "волшебная" функция get_browser()
и поверь(пока - на слово), что клиент далеко не всегда отдает в заголовках свой user-agent. и далеко не всегда в нем - корректная информация. и уж совсем нету в тех заголовках про состояние javascript'a и про установленные плагины/подержку activeX. совсем.

Добавлено через 8 минут и 24 секунды
Цитата(elkeeper @  28.7.2008,  19:06 Найти цитируемый пост)
по-компетентнее

дефис не нужен.

Автор: alexey___ 28.7.2008, 21:12
ALL, интересная тема - неправда ли!!!???

проверил работу get_browser(). 
При включенном или выключенном javascript в броузере при проверке - всегда результат один единичка.


Код

<?php
        echo $_SERVER['HTTP_USER_AGENT'] . "\n\n";

        $browser = get_browser(null, true);
        echo $browser;                          //вот здесь постоянно выходит одно и тоже значение - 1, с вкл и выкл javascript
?>
 

хотя в различных источниках советуют использовать  get_browser, для получения информации о состоянии текущего броузера. НО ничего не выходит

Автор: sTa1kEr 28.7.2008, 21:35
Цитата(alexey___ @  28.7.2008,  22:12 Найти цитируемый пост)
При включенном или выключенном javascript в броузере при проверке - всегда результат один единичка.

Естественно, т.к. единственное назначение этой функции - это определение браузера пользователя по заголовку User-Agent. А все значения полученного массива - это, как правильно заметил skyboy, возможности данного браузера (прим. GoogleBot не умеет выполнять JS, а FF умеет). 

Автор: skyboy 28.7.2008, 22:20
Цитата(sTa1kEr @  28.7.2008,  20:35 Найти цитируемый пост)
А все значения полученного массива

...в свою очередь, полученные исходя из данных в browsercap(abilities).ini. Следовательно, возможность распознать возможности по user-agent'y(если все же он будет получен и будет адекватный клиенту) зависит от версии PHP и/или доредактированности browsercap.ini, оттого полагаться на сей механизм даже в вопросах определения потенциальной поддержки javascript'a я бы не стал.
а судя по тому, каким был первый пост товарища elkeeper на форуме и по его последующему молчанию, товарищ балуется троллизмом.

Автор: elkeeper 28.7.2008, 23:13
Цитата(skyboy @  28.7.2008,  22:20 Найти цитируемый пост)
а судя по тому, каким был первый пост товарища elkeeper на форуме и по его последующему молчанию, товарищ балуется троллизмом. 


Товарищ elkeeper не балуется троллизмом, а просто ехал с работы домой, убеждал себя в осутствии в headerах какого-либо намека на передачу каких-либо свойств браузера (кроме его названия), осознавал бесполезность функции get_browser (параллельно изучая такое же бесполезное содержание browsercap.ini) и заново открывал для себя переменные окружения.

А теперь по теме.

Хотел бы принести искренние извинения всем за присутствие здравого снобизма (именно снобизма - навязчивого желания оскорбить кого-либо не было) в собственном изложении - таков я есть и это остаётся на моей совести.  (проходить курс "Убей в себе сноба" не буду, хотя было бы полезно)

Также, хотел бы извиниться перед alexey___'ем за попытку "сбить с пути истинного" - не нарочно, честно. 12-ти часовой рабочий день дал о себе знать (да, рабочий день у меня начинается в 8 утра).

И конечно же, всем большое человеческое спасибо за то, что не позволили миру получить ещё одного идиота-программиста (это я про себя) в самом расцвете сил.

И ещё я научился пользоваться советами... своими советами smile

PS
Хотя про headerы можно было написать и сразу (это только после поста, я полез в Live HTTP-headers смотреть) - по-моему самое наглядное объяснение, что именно передает браузер и чего передавать он явно не может...

Автор: skyboy 29.7.2008, 00:07
Цитата(elkeeper @  28.7.2008,  22:13 Найти цитируемый пост)
Хотя про headerы можно было написать и сразу

т.е. по-твоему простого "инфорация о клиенте в полной мере доступна тоьлко клиенту, а серверу - нет" - недостаточно? smile
Цитата(elkeeper @  28.7.2008,  22:13 Найти цитируемый пост)
осознавал бесполезность функции get_browser

ну, не совсем. все же во время внедрения, браузеры были, наверное, честными(отдаавли корректный user agent), между собой слабо совместимыми на уровне верстки(internet explorer 4 и netscape какой-то там), javascript еле-еле осилил innerHTML - ни о каком createElement/getElementById речи не шло, потому эта функция, наверное, спасала целые народы. А сейчас, когда не то, что заголовки - куки подделывают... эээх... :(
Цитата(elkeeper @  28.7.2008,  22:13 Найти цитируемый пост)
таков я есть и это остаётся на моей совести

только в следующий раз на поворотах аккуратнее, ладушки?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)