Я хочу получить в PHP высоту и ширину экрана и окна просмотра, когда пользователь посещает страницу.
Я пробовал разные способы, но все они вызывают другие проблемы.
Мои цели:
Получите информацию о первой загрузке (нет страницы перехода, без перезагрузки).
Не изменять URL-адрес
Не влиять на остальную часть PHP, которая работает при загрузке, или сделать этот PHP дважды
То, что я пробовал до сих пор:
Javascript для получения размеров видовых экранов:
if(!isset($_POST['width']) || !isset($_POST['height'])) { echo ' <script type="text/javascript" src="jquery.min.js"></script> <script type="text/javascript"> $(document).ready(function () { var height = $(window).height(); var width = $(window).width(); $.ajax({ type: \'POST\', data: { "height": height, "width": width }, success: function (data) { $("body").html(data); }, }); }); </script> '; } $user_width = $_POST['width']; $user_height = $_POST['height'];
проблемы: заставляет все php запускаться дважды, один раз при загрузке, один раз, когда он возвращает значение (второй раз составляет около 4 секунд после первого), что делает остальную часть php wacky … также делает загрузку страницы очень медленной
Вставка размеров экрана в URL:
if(isset($_SESSION['screen_width']) AND isset($_SESSION['screen_height'])){ $user_width = $_SESSION['screen_width']; $user_height = $_SESSION['screen_height']; } else if(isset($_REQUEST['width']) AND isset($_REQUEST['height'])) { $_SESSION['screen_width'] = $_REQUEST['width']; $_SESSION['screen_height'] = $_REQUEST['height']; header('Location: ' . $_SERVER['PHP_SELF']); } else { echo '<script type="text/javascript">window.location = "' . $_SERVER['PHP_SELF'] . '?width="+screen.width+"&height="+screen.height;</script>'; }
проблемы: изменяет URL-адрес (который влияет на другой код и выглядит плохо по сравнению с невыразимыми URL-адресами, которые у них есть сейчас); не возвращает размер видового экрана afaik
Я ноб. Может быть, это легко сделать, но я действительно не знаю. Я много искал. Вот как я получил методы выше. Но я не мог заставить их работать на меня. Afaik, я нигде не видел решения для подобной ситуации.
Благодаря 🙂
Как насчет того, чтобы ваш документ был готов к отправке запроса AJAX в отдельный PHP-документ, тогда включите его в голову при загрузке страницы. Таким образом, вы можете использовать любой конкретный HTML-код, который хотите загрузить, прямо в тело, когда будете готовы.
Например:
<head> <script> $(document).ready( function() { var height = $(window).height(); var width = $(window).width(); $.ajax({ url: 'body.php', type: 'post', data: { 'width' : width, 'height' : height, 'recordSize' : 'true' }, success: function(response) { $("body").html(response); } }); }); </script> </head> <body></body>
И тогда ваш файл body.php
будет выглядеть примерно так:
<?php if(isset($_POST['recordSize'])) { $height = $_POST['height']; $width = $_POST['width']; $_SESSION['screen_height'] = $height; $_SESSION['screen_width'] = $width; //Any html you want returned in here
Если вы тогда не хотели, чтобы функция JS выполняла каждую загрузку страницы, просто заполните все это в <?php if(isset($_SESSION['screen_height'])) { //JS function } ?>
Я не уверен на 100%, что вы намеревались сделать с измерениями, как только вы их получите, поэтому я извиняюсь, если мой ответ немного расплывчатый, но, делая это таким образом, страница только устанавливает сохраненные измерения при первом посещении этого сеанс просмотра, и он не должен перенаправляться, поэтому я надеюсь, что это по крайней мере немного полезно 🙂
Я думаю, что лучше спросить себя: что вы хотите делать с width
и height
? И посмотрите, есть ли другие способы достижения этой цели. Вы не можете получить у пользователя ширину и высоту экрана с помощью PHP, потому что он работает на стороне сервера.
Поэтому эти данные никогда не доступны при первой загрузке.
Вы можете отправить данные с помощью AJAX, а затем внести изменения на страницу с помощью JavaScript. Затем следующая страница перезагружает данные, когда они хранятся, доступ к серверу.