我想在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的其余部分变得古怪。。。同时,使页面加载速度减慢
将屏幕尺寸放入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
我是个笨蛋。也许这很容易做到,但我真的不知道。我找了很多。这就是我得到上述方法的原因。但我无法让他们为我工作。尽管如此,我还没有看到类似情况的解决方案。
感谢:)
让您的文档就绪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对页面进行更改。然后,下一个页面重新加载数据,当存储时,服务器端可用。