Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как узнать разрешение монитора?
 
 автор: Владимир55   (17.10.2007 в 10:54)   письмо автору
 
 

Каким образом можно узнать разрешение монитора пользователя, просматривающего данную страницу?

   
 
 автор: sim5   (17.10.2007 в 10:56)   письмо автору
 
   для: Владимир55   (17.10.2007 в 10:54)
 

Быстро проскочили )) http://softtime.ru/forum/read.php?id_forum=4&id_theme=44394&page=2

   
 
 автор: Владимир55   (17.10.2007 в 11:03)   письмо автору
 
   для: sim5   (17.10.2007 в 10:56)
 

А как на сервер втащить?

Вероятно, через глобальные переменные. Но как?

   
 
 автор: sim5   (17.10.2007 в 11:05)   письмо автору
 
   для: Владимир55   (17.10.2007 в 11:03)
 

http://domain.my/screen.php?w=1024&h=768

   
 
 автор: Владимир55   (17.10.2007 в 11:12)   письмо автору
 
   для: sim5   (17.10.2007 в 11:05)
 

Вызвать screen.php?w=1024&h=768 и из его адреса считать?

   
 
 автор: sim5   (17.10.2007 в 11:25)   письмо автору
 
   для: Владимир55   (17.10.2007 в 11:12)
 

Это просто как пример передачи методом GET разрешения дисплея, у вас ведь нет файла screen.php. Конечно, если требуется перед загрузкой основной страницы, узнать и передать разрешение на сервер, то этот метод не пойдет. Нужно просто отправить клиенту заголовок для перезагрузки страницы, а в урл перезагружаемой страницы передать разрешение дисплея. Вот уже в скрипте по этому урл принимайте и обрабатывайте эти параметры.

   
 
 автор: Владимир55   (17.10.2007 в 17:24)   письмо автору
 
   для: sim5   (17.10.2007 в 11:25)
 

Все ж таки я пока что ничего не понял.

Пусть в корне есть файл t2.htm, и мне нужно узнать, какое разрешение на мониторе у пользователя, вызвавшего этот файл.

Для этого я пишу в файле t2.htm такой код:

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Новая страница 1</title>
</head>
<body>

<SCRIPT LANGUAGE="JavaScript">
<body onload="alert(screen.width+'x'+screen.height)"> 
screen.php?w=width&h=height    
</script>

</body>
</html>


В корневой папке есть также файл screen.php, который создан специально для фиксирования разрешения экрана. В нем код:

<?php
$width
$_GET[width];
$height=$_GET[height];

echo 
$width;
echo 
$height ;
?>

Разумеется, ничего это не работает. Почему -то.

   
 
 автор: bronenos   (17.10.2007 в 17:28)   письмо автору
 
   для: Владимир55   (17.10.2007 в 17:24)
 

<body onLoad="window.location='screen.php?width='+screen.width+'&height='+screen.height">

   
 
 автор: Владимир55   (17.10.2007 в 17:44)   письмо автору
 
   для: bronenos   (17.10.2007 в 17:28)
 

Пока я даже не знаю, работает или нет, ибо непонятно, как поймать ответ.

В файле screen.php я сделал такой код:

<?php
$width
$_GET[width];
$height=$_GET[height];
$file fopen ("uved/width.txt""w") ;
fputs ($file$width) ;
fclose ($file) ;
?>

При этом я надеялся, что будет сформирован файл width.txt и в нем появится искомое разрешение.

Но файл не появился.

Что сделано неверно?

   
 
 автор: bronenos   (17.10.2007 в 18:29)   письмо автору
 
   для: Владимир55   (17.10.2007 в 17:44)
 

например не выставлены права 777 на папку где должен создасться файл

   
 
 автор: Владимир55   (17.10.2007 в 18:35)   письмо автору
 
   для: bronenos   (17.10.2007 в 18:29)
 

Права выставлены - это рабочая папка, в неё и другие файлы пишутся.

Как еще можно "поймать" результат?

   
 
 автор: bronenos   (17.10.2007 в 18:38)   письмо автору
 
   для: Владимир55   (17.10.2007 в 18:35)
 

<?php
$G 
$_GET;
print 
"Ширина: $G[width]<br/>Высота: $G[height]";
?>

   
 
 автор: Владимир55   (17.10.2007 в 19:06)   письмо автору
 
   для: bronenos   (17.10.2007 в 18:38)
 

Куда вписать этот код?

В html файл, в котором строка
<body onLoad="window.location='screen.php?width='+screen.width+'&height='+screen.height"> -?

Вписал, размеров экрана не выводит.

Тогда из этого файла удалил и вписал в файл screen.php. Запускаю их по очереди - не выводит!

   
 
 автор: bronenos   (17.10.2007 в 19:17)   письмо автору
 
   для: Владимир55   (17.10.2007 в 19:06)
 

разрешить надо исполнение жс

   
 
 автор: Владимир55   (17.10.2007 в 19:23)   письмо автору
 
   для: bronenos   (17.10.2007 в 19:17)
 

JS не запрещены, они исполняются и на других файлах.

Вот такой код попробовал:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Новая страница 1</title>
</head>
<body>
<SCRIPT LANGUAGE="JavaScript">
<body onload="alert(screen.width+'x'+screen.height)"> 
</script>
<?php
$G 
$_GET;
print 
"Ширина: $G[width]<br/>Высота: $G[height]";
?> 
</body>
</html>


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

Но его нет.

   
 
 автор: Владимир55   (17.10.2007 в 19:27)   письмо автору
 
   для: Владимир55   (17.10.2007 в 19:23)
 

Можно так:

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Новая страница 1</title>
</head>

<body>

<SCRIPT LANGUAGE="JavaScript">
<body onLoad="window.location='width='+screen.width+'&height='+screen.height">
</script>

<?php
$G 
$_GET;
print 
"Ширина: $G[width]<br/>Высота: $G[height]";
?> 

</body>

</html>


Все равно не работает!

Не знаете, в чем дело?

   
 
 автор: Eugene77   (17.10.2007 в 20:52)   письмо автору
 
   для: Владимир55   (17.10.2007 в 19:27)
 

Занятная у вас окрошка из html тегов! :)

Попрбуйте для начала так:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Новая страница 1</title>
</head>

<body onLoad="window.location='width='+screen.width+'&height='+screen.height">

<?php
$G = $_GET;
print "Ширина: $G[width]<br/>Высота: $G[height]";
?>

</body>

Ошибку выдаст, но размеры укажет ; )

   
 
 автор: Владимир55   (17.10.2007 в 22:42)   письмо автору
 
   для: Eugene77   (17.10.2007 в 20:52)
 

Не то, что страница показала ошибку, а вообще вылетела на несуществующую страницу, показав в адресной строке

http://lsite.ru/width=1280&height=1024

Конечно же, что это не решение задачи.

   
 
 автор: sim5   (17.10.2007 в 22:50)   письмо автору
 
   для: Владимир55   (17.10.2007 в 22:42)
 

А что вы хотите от разрешения? Ради того, чтобы просто его получить, думаю, вы это не затевали? Если для каких либо целей, то:


<?
switch($_GET['width']) {
  case 
1024//подключить 1024.CSS
  
break;
  case 
1280//подключить 1280.CSS
  
break;
  default : 
//подключить 800.CSS
}

Кстати, для этих целей достаточно знать только разрешение по горизонтали, совсем не обязательно узнавать и "гнать" на серевер разрешение по вертикали.

   
 
 автор: Владимир55   (17.10.2007 в 23:03)   письмо автору
 
   для: sim5   (17.10.2007 в 22:50)
 

Это очень хороший рецепт, спасибо!
Это даже превосходный рецепт!

Если я его правильно понял, то суть рецепта в том, что средствами CSS делаются три варианта верстки, и, в зависимости от того, с каким разрешением просматривает страницу данный пользователь, подключается один из них.

Так?

А если так, что, очевидно, этому коду должен предшествовать соответствующий JS, который будет формировать глобальную переменную методом GET.

А если так, то какой это код?
Очевидно, что предложенный Вами

<body onload="alert(screen.width+'x'+screen.height)">

для этого не подходит.
Не смотря на приведенные выше советы, у меня на этом коде JS все застопорилось!

   
 
 автор: sim5   (17.10.2007 в 23:29)   письмо автору
 
   для: Владимир55   (17.10.2007 в 23:03)
 

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

   
 
 автор: Владимир55   (17.10.2007 в 23:49)   письмо автору
 
   для: sim5   (17.10.2007 в 23:29)
 

В этой части я все понял. И, вероятнее всего, последую Вашему совету и сделаю именно так. Но чуть позже.

А сейчас у меня немного другая задача.

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

А для этого надо всего лишь перетащить сведения из JS на сервер! И вот это НУ НИКАК не удается! По моему скромному мнению, для этого надо в Вашем коде заменить alert на что-то другое. Не знаю на что. Или как-то еще. В общем, если знаете, подскажите - как перенести данные о разрешении экрана по ширине на сервер?

   
 
 автор: sim5   (18.10.2007 в 00:36)   письмо автору
 
   для: Владимир55   (17.10.2007 в 23:49)
 

Отсылаем клиенту следующий код:

<script>
var w = screen.width;
var h = screen.height;
location="screen.php?w="+w+"&h="+h;
</script>

В файле screen.php:

<?
if (isset($_GET['w']))
echo 
'Разрешение экрана: '.$_GET['w'].'x'.$_GET['h'];
?>

Попробуйте, будет ясно.

   
 
 автор: Владимир55   (18.10.2007 в 11:04)   письмо автору
 
   для: sim5   (18.10.2007 в 00:36)
 

Картина получилась такая:

При запуске файла с HTML кодом автоматически открывается файл screen.php и выводится правильное сообщение.

То есть, в принципе, задуманная операция возможна!

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

Можно так сделать?

Забегая вперед, скажу, что вот такой код не работает:


<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Новая страница 1</title>
</head>

<script>
var w = screen.width;
var h = screen.height;
</script>

<?
if (isset($_GET['w']))
echo 
'Разрешение экрана: '.$_GET['w'].'x'.$_GET['h'];
?> 

</body>
</html>

   
 
 автор: sim5   (18.10.2007 в 11:38)   письмо автору
 
   для: Владимир55   (18.10.2007 в 11:04)
 

Я ведь не знаю куда вы будете заносить эти разрешения, потому и пишу пример. Ну например, если вы собираете статистику о посетителях посредством поулчения от них некой информацию, то ничего не стоит добавить в форму скрытое поле, которое бы передавало на сервер еще и параметры разрешения монитора. Это один вариант. Второй вариант, когда вы высылаете скрипт и перенаправляете. Тут ведь надо еще учитывать - получали ли вы ранее от этого посетителя параметры его экрана, а может он под новыми работает (ранее работал под 800х600, а теперь стал 1024х768). Короче, тут уж насколько вам глубокая статистика нужна не знаю, но не стоит постоянно узнавать разрешение, думаю, вы понимаете это.
Для того чтобы узнать это разрешение, достаточно послать кленту чистый JS-код на странице и больше ничего, ни какого html кода больше не надо на странице. А после приема данных, и, допустим, внесения их в базу/файл, перенаправляйте пользователя туда, куда вам необходимо хидером:

<?
header
('location: url');

А приведенный вами код и не будет работать - он никуда и ничего не отсылает, так что и проверять isset($_GET['w']) нет смысла.

   
 
 автор: Владимир55   (18.10.2007 в 12:26)   письмо автору
 
   для: sim5   (18.10.2007 в 11:38)
 

Статистика собирается очень просто: вызывается файл с именем width.txt, где width - полученный от посетителя параметр. Например, вызывается файл 1024.txt. И увеличивается хранящееся в нем число на единицу.

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

Вариант с переходом посетителя на служебную страницу screen.php мне представляется нежизненным. Пришел посетитель на Главную, а оказался на screen.php - куда мне его переправлять? Опять на главную? Чтобы он снова на screen.php возвратился? Он так и будет ходить между этими страницами?!

   
 
 автор: AlexSol   (18.10.2007 в 12:57)   письмо автору
 
   для: Владимир55   (18.10.2007 в 12:26)
 

>

   
 
 автор: Владимир55   (18.10.2007 в 13:54)   письмо автору
 
   для: AlexSol   (18.10.2007 в 12:57)
 

Похоже, что к файлу screen.php обращения нет. Во всяком случае, текстовый файл не формируется.

Я дописал в screen.php строки

echo "WORD!";
die ;

но они не воспроизводятся.

Похоже, что поставленная задача не имеет решения...

   
 
 автор: AlexSol   (18.10.2007 в 13:59)   письмо автору
 
   для: Владимир55   (18.10.2007 в 13:54)
 

в архиве рабочий вариант.

http://ballista.ru/test/1.html

результат - http://ballista.ru/test/width.txt

   
 
 автор: Владимир55   (18.10.2007 в 14:45)   письмо автору
 
   для: AlexSol   (18.10.2007 в 13:59)
 

Супер!

То, что надо! Большое спасибо!

   
 
 автор: Владимир55   (18.10.2007 в 16:24)   письмо автору
 
   для: Владимир55   (18.10.2007 в 14:45)
 

Так вписался в скрипт - как влитой!

Спасибо!

   
 
 автор: sim5   (18.10.2007 в 12:58)   письмо автору
 
   для: Владимир55   (18.10.2007 в 12:26)
 

Я вас не заставляю гонять посетителя туда-сюда, и не обязательно выставялть JS код на все страницы, достаточно проверить сразу на главной странице - есть ли уже разрешение экрана от этого посетителя. Если есть, то ничего не надо отправлять ему, если нет, то отправляйте чистый JS-код, в котором location служить будет ваша главная страница, в ней же и принимайте интересующие параметры... И никуда никого перенаправлять не надо будет. Это просто своеобразный рефрешь произойдет. Ну неужели подумать трудно? Я ведь не знаю чего там вы конкретно хотите, я вам просто примеры пишу.

   
 
 автор: Владимир55   (18.10.2007 в 13:47)   письмо автору
 
   для: sim5   (18.10.2007 в 12:58)
 

* я вам просто примеры пишу *

Спасибо. Я сберегу Ваши примеры, и, возможно, что в будущем они пригодятся.
Но, честно говоря, вместо множества примеров лучше бы конкретный ответ на конкретный вопрос, который прост как правда: как загнать на сервер параметры монитора пользователя. Хоть в текстовый файл, хоть куда, но чтобы они там оказались. Не так уж важно, что я делаю и зачем, важно как осуществить вот это действие. Ответ на этот вопрос полностью удовлетворил бы мое любопытство. А то примеры есть, а решения нет...

   
 
 автор: Dmitry Berkut   (18.10.2007 в 14:55)   письмо автору
 
   для: Владимир55   (18.10.2007 в 13:47)
 

Ага, у Вас хоть примеры есть, а мне тут уже целые сутки никто не может помочь с идентификацией объекта, по которому клацаешь мышкой, для того чтобы снять с него координаты относительно верхнего левого угла документа. А Вы говорите примеры есть, ответа нет. Мне бы хоть кто-нибудь правильный пример написал бы.

   
 
 автор: Владимир55   (18.10.2007 в 16:27)   письмо автору
 
   для: Dmitry Berkut   (18.10.2007 в 14:55)
 

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

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

   
 
 автор: Dmitry Berkut   (18.10.2007 в 16:58)   письмо автору
 
   для: Владимир55   (18.10.2007 в 16:27)
 

В продтверждение Ваших слов, совсем недавно AlexSol предложил мне решение проблемы с помощью document.body.scrollTop, за что огромное ему спасибо, и я действительно не пожалел, что обратился за помощью именно сюда. Но все равно остается вечная проблема - совместимость с разными броузерами. Например возникла новая проблема: в IE работает захват координаты Х элемента относительно левого верхнего угла экрана, элемента, по которому производится клик:

х=event.screenХ;
y=event.screenY;

а в Netscape - такая байда не пашет. Вот пытаюсь найти еще вариант для него....

   
 
 автор: elenaki   (18.10.2007 в 18:01)   письмо автору
 
   для: Dmitry Berkut   (18.10.2007 в 16:58)
 

Netscape ?!?!?!? а кто в наше время Нетскейп юзает? :О пацтулом

   
 
 автор: Eugene77   (18.10.2007 в 18:09)   письмо автору
 
   для: Dmitry Berkut   (18.10.2007 в 16:58)
 

>а в Netscape - такая байда не пашет. Вот пытаюсь найти еще вариант для него....

Да бросте вы!
Netscape уже никто не использует.
Спросите хоть у своего Владимира - он статистику собирает.

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

   
 
 автор: Dmitry Berkut   (18.10.2007 в 18:39)   письмо автору
 
   для: Eugene77   (18.10.2007 в 18:09)
 

Ребята, я может чего не понимаю... FireFox - это по Вашему что??? Или Вы хотите сказать, что Вы прям так все дружно сидите на IE?????

   
 
 автор: Владимир55   (19.10.2007 в 00:46)   письмо автору
 
   для: Dmitry Berkut   (18.10.2007 в 18:39)
 

IE - 77%
-Опера - 12 %;
ФФ - 9%.

   
 
 автор: bronenos   (19.10.2007 в 07:53)   письмо автору
 
   для: Владимир55   (19.10.2007 в 00:46)
 

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

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования