mimmi20/modernizr-server

此包已被放弃,不再维护。未建议替代包。

为您的应用提供浏览器和功能检测

安装: 100

依赖项: 1

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 0

开放问题: 0

语言:JavaScript

1.0.5 2016-04-28 19:19 UTC

This package is not auto-updated.

Last update: 2022-02-01 12:50:38 UTC


README

Modernizr是了解用户浏览器能力的好方法。然而,您只能在浏览器本身上访问其API,这意味着您无法轻松地从服务器逻辑中受益于了解浏览器能力。

渐进增强、媒体查询和body类可以很好地用于调整网站及其外观。但对于网站和页面的结构更改,有时最初从服务器发出正确的标记会更加简单。

modernizr-server库是将Modernizr浏览器数据带到您的服务器脚本环境的一种方式。例如,在PHP中

<?php

use ModernizrServer\Modernizr;

Modernizr::init();

if (null === Modernizr::getData()) {
    print "<html><head><script type='text/javascript'>";
    print Modernizr::buildJsCode() . "</script></head><body></body></html>";
    exit;
}

print 'The server knows:';
foreach (Modernizr::getData() as $feature => $value) {
    print "<br/> $feature: ";
    print_r($value);
}

?>

服务器知道:canvas: 1 canvastext: 1 geolocation: 1 crosswindowmessaging: 1 websqldatabase: 1 indexeddb: 0 hashchange: 1 ...

通过这个(PHP)API在服务器上提供的功能检测与通过客户端(JavaScript)API提供的完全相同。

目前,只有PHP实现了服务器端API,但其他语言将轻松得多。请继续关注项目以获取更多信息。

此外:这是一个年轻的项目,所以请在高流量生产环境中谨慎使用 :-)

如何使用它(与PHP一起使用)

http://modernizr.com下载最新的Modernizr脚本并将其放置在modernizr.js目录中。在该目录内,文件应也命名为modernizr.js,但可以是文件的压缩或未压缩版本。(如果要将它放在其他地方,请参阅本节底部的说明。)

理想情况下,应在您的PHP脚本的最开始包含modernizr-server.php库 - 或者至少在发出任何HTML之前

<?php
    include('modernizr-server.php');
    ...

在脚本中的任何后续位置,您都可以使用$modernizr对象,就像您在客户端使用Modernizr对象一样

if ($modernizr->svg) {
    ...
} elseif ($modernizr->canvas) {
    ...
}

有关通过API测试和可用的所有功能的详细信息,请参阅Modernizr 文档

一些功能(特别是videoaudioinputinputtypes)有子功能,因此它们作为嵌套PHP对象提供

if ($modernizr->inputtypes->search) {
    print "<input type='search' ...";
} else {
    print "<input type='text' ...";
}

所有功能和子功能都以整数10返回,表示truefalse,因此可以在PHP中的逻辑评估中使用它们。

重新定位modernizr.js

如果您想在您的服务器上特定位置放置Modernizr脚本,您可以在modernizr-server.php库的顶部更改其(相对)路径。默认情况下,它在库文件的同级文件夹中

static $modernizr_js = '../modernizr.js/modernizr.js';

JavaScript文件不需要在直接对浏览器可见的文件夹中 - 只需一个库可以读取的文件夹。尽管如此,如果您也在客户端使用Modernizr,您可能已经在您的Web服务器上有一个脚本副本,您可以使用它。

工作原理

用户首次访问包含modernizr-server.php库的页面时,该库会将Modernizr脚本发送到客户端,并在末尾添加一小段脚本。Modernizr按常规运行并填充功能测试结果。

然后,这个小后缀脚本将结果序列化成一个简短的cookie,并通过JavaScript在客户端设置。之后立即刷新页面。

第二次执行PHP脚本时,库会从cookie中获取内容,并使用这些内容在服务器端实例化$modernizr对象。如果可能,它将被放置在PHP的$_SESSION中,以便在后续请求中快速访问。

只要cookie或会话之一保持活跃,就不会进一步执行Modernizr脚本。如果它们都过期,下一次请求包含modernizr-server.php的页面将导致浏览器重新运行Modernizr测试。

注意事项

此库依赖于浏览器重新加载用户刚刚访问的页面 - 以使用cookie中的Modernizr数据重新请求它。理论上,如果cookie没有在客户端正确设置,刷新可能会无限循环。我会考虑一些缓解方法。

建议您首先在一个通过用户使用GET方法访问的页面上使用modernizr-server.php。如果第一次请求是POST(例如,来自表单),页面刷新将导致浏览器询问用户是否希望立即重新提交表单,这可能会使他们感到困惑。