7

当用户访问页面时,我想在 PHP 中获取屏幕和视口的高度/宽度。

我尝试了不同的方法,但它们都会导致其他问题。

我的目标:

  • 获取第一次加载的信息(没有跳转页面,没有重新加载)。

  • 不改网址

  • 不影响在负载时运行的其余 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 的其余部分变得古怪......而且,使页面加载非常缓慢

将屏幕尺寸放入 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,我还没有在任何地方看到类似情况的解决方案。

谢谢 :)

4

2 回答 2

9

如何让您的文档就绪 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% 确定一旦你有了这些尺寸,你打算如何处理它们,所以如果我的回答有点含糊,我深表歉意,但是通过这种方式,页面只会在第一次访问时设置保存的尺寸浏览会话,它不必重定向,所以我希望它至少有点帮助:)

于 2013-08-07T12:54:26.083 回答
1

我认为最好问问自己:你想用widthand做height什么?看看是否有其他方法可以实现这一目标。您无法使用 PHP 获取用户的屏幕宽度和高度,因为它运行在服务器端。

所以这个数据在第一次加载时永远不可用。

您可以使用 AJAX 提交数据,然后使用 JavaScript 对页面进行更改。然后下一页重新加载数据,当存储时,服务器端可用。

于 2013-08-07T10:44:56.063 回答