【问题标题】:Client display resolution detection客户端显示分辨率检测
【发布时间】:2011-09-20 21:48:13
【问题描述】:

目前我正在使用以下 PHP+JavaScript 代码来检测客户端浏览器窗口大小

$url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
if(isSet($_GET['w']) && isSet($_GET['h']))
{
$w = $_GET['w']; 
$h = $_GET['h'];
}


if(!$w && !$h)
{
    $pos= strpos($url, '?');
    if($pos===false)
    {
echo '<script type="text/javascript">';
echo "var w = screen.width;
var h = screen.height;
window.location.href = '".$url."?w='+w+'&h='+h;
</script>'";
}

else {
echo '<script type="text/javascript">';
echo "var w = screen.width;
var h = screen.height;
window.location.href =  '".$url."&w='+w+'&h='+h;
</script>'";
}
}

我想知道,有什么方法可以优化代码(通过 ajax 发布,.. 等)或简单的方法吗?

【问题讨论】:

  • 你这样做的目的是什么?可能根本没有必要。听起来您正在使用它来指定要发送哪些 CSS 数据(基于下面的评论),但是单个 CSS 文件可以处理多个截然不同的分辨率,因此这真的没有必要(并且适用于具有JS禁用,并消除往返)。如果用于分析,您可以在每次页面加载时发送一个 AJAX 请求,使用 w/h(或者您希望的频率,例如仅新会话)。

标签: php javascript ajax resolution


【解决方案1】:

不是真的,因为您必须先往返于 broser 才能确定屏幕尺寸。

如果您只需要后续请求的屏幕尺寸,您可以进行 ajax 调用并将值保存在会话中(jquery 示例):

$(document).ready(function() {
  var w = screen.width;
  var h = screen.height;
  $.load('/yourPhpScriptToSaveTheSession.php?&w='+w+'&h='+h);
});

【讨论】:

  • 我对js不熟悉,有没有办法回显var w,或者var h?我的意思是&lt;?=$var?&gt; 之类的东西(就像在 php 中一样)。就我而言,我想将它们发送到css.php。在 php 中看起来像 &lt;link rel="stylesheet" href="core/design/css.php?w=&lt;?=$w?&gt;&amp;h=&lt;?=$h?&gt;" type="text/css" media="all"&gt;
  • 是的,您可以这样做:var headID = document.getElementsByTagName("head")[0]; var cssNode = document.createElement('link'); cssNode.type = 'text/css'; cssNode.rel = 'stylesheet'; cssNode.href = 'core/design/css.php?w=' + w + '&amp;h=' + h; cssNode.media = 'screen'; headID.appendChild(cssNode); 但请注意:禁用 Javascript 的访问者将根本没有样式......
【解决方案2】:

这里没有ajax

if ( $_GET["setscreen"] ) $_SESSION['display_resolution'] = $_GET['screenwidth'] . 'x' . $_GET['screenheight'];
if ( $_GET["setscreen"] ) header('Location: ' . $_SERVER['PHP_SELF']);
if ( ! $_SESSION['display_resolution'] ) echo '<script type="text/javascript">window.location = "' . $_SERVER['PHP_SELF'] . '?setscreen=1&screenwidth="+screen.width+"&screenheight="+screen.height;</script>';

会话 display_resolution 包含类似于:1280 x 1024 的字符串

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多