marknotton / agent
用于查询用户代理数据的Jens Segers Agent工具的扩展。
Requires
- php: ^7.2.5|^8.0
- craftcms/cms: ^3.0|^4.0|^5.0
- jenssegers/agent: ^2.6.4
README
安装
composer require marknotton/agent
官方文档
这实际上只是Jens Segers Agent实用程序的扩展。有关所有可用方法的详细信息,请参阅他们的文档。
尽管我已经尽量保持此插件尽可能精简,但我通过包含一些自己的方法扩展了Jens Segers Agent实用程序...
检查
检查以确定用户浏览器和版本类型是否匹配。
示例 1
true
如果用户当前浏览器与任何浏览器名称匹配
{{ craft.agent.check('edge', 'firefox') }}
示例 2
您可以使用大多数 比较运算符 来匹配浏览器的版本。
true
如果浏览器版本等于 100
{{ craft.agent.check('chrome == 100'}}
true
如果浏览器版本不等于 100
{{ craft.agent.check('chrome != 100'}}
true
如果浏览器版本小于 100
{{ craft.agent.check('chrome < 100'}}
true
如果浏览器版本大于 100
{{ craft.agent.check('chrome > 100'}}
true
如果浏览器版本小于或等于 100
{{ craft.agent.check('chrome <= 100'}}
true
如果浏览器版本大于或等于 100
{{ craft.agent.check('chrome >= 100'}}
示例 3
您可以为检查添加多个条件。 true
如果任何条件匹配
{{ craft.agent.check('ie 9', 'chrome > 49', 'firefox') }}
示例 5
您还可以通过在字符串前加前缀 not
来否定检查。 true
如果用户当前浏览器不是IE版本 9 或更高。
{{ craft.agent.check('not ie => 9') }}
用户代理白名单
如果用户代理包含任何白名单异常,即使只有部分匹配,则检查方法将始终返回 true
。这可以用于允许某些机器人通过检查方法。
您可以通过在项目的 configs
目录中创建一个 agent.php
配置文件来管理白名单
return [ 'userAgentWhitelist' => [ 'APIs-Google', 'Mediapartners-Google', 'AdsBot-Google', 'Googlebot-Image', 'Googlebot', 'FeedFetcher-Google' ] ];
或通过CMS插件设置
版本
Jens Segers原始的 版本 方法需要一个属性名称(浏览器、平台、操作系统等...);返回值将解析为完整的模式版本
{{ craft.agent.version(craft.agent.browser) }} // 104.3.0.1
我发现在大多数情况下获取主要浏览器版本就足够了。因此,您可以直接返回一个“向下取整”的版本号,其中浏览器是默认参数。
{{ craft.agent.version() }} // 104
您仍然可以通过这种方式获取完整版本或浮点版本号
{{ craft.agent.version('text') }} // 104.3.0.1 {{ craft.agent.version('float') }} // 104.3
重定向
如果用户代理不符合检查方法的任何条件,将用户重定向到新模板/URL
{% set criteria = [ 'chrome > 55', 'firefox > 44', 'safari >= 7', 'edge >= 15', 'opera > 50' ] %} {{ craft.agent.redirect(criteria, 'no-support.twig', 302) }}
数据
要将用户代理的设备名称、版本和设备类型直接设置到元素中。使用Crafts的attr方法来渲染常见的数据属性。
<html {{ attr({ data : craft.agent.commonData() })}}>
最终结果将类似于以下内容
<html data-browser-name="chrome" data-browser-version="103" data-device="desktop">
但为什么你需要这个? 这在CSS中提供了针对浏览器特定的样式的选项;并且这种服务器端方法将省略未样式内容(FOUC)或布局变化,因为样式规则在页面加载时不依赖于JavaScript。这意味着您可以在CSS中自信地使用类似以下内容
html[data-browser-name="safari"] article img { ... }
agent.js
有一个小的 IIFE 文件 agent.min.js (< 0.7k),可以直接注入到 <head>
。您需要通过插件设置启用此功能。
这将定义全局属性到window对象,包括浏览器名称、版本和不同设备类型。
或者您可以手动注册 the agent.min.js 资产
Twig
{{ craft.agent.registerAgentJsFile(<useCompressedFile:bool>, <position:string>) }}
PHP
Agent::registerAgentJsFile(<useCompressedFile:bool>, <position:string>);
变更日志 & 破坏性变更
自从 Agent 1.2.0 的上一个版本以来,已经有很多变化。其中一些是为了性能,一些是为了合理性。可以说,在前一个版本中使用的某些实践对于没有明显的好处而被过度设计。这些变化可能是破坏性的,需要在旧项目中进行小的语法调整来解决。请查看 "4.0.0 - 2022-09-11" 变更日志以获取建议和修复方法。[请点击此处查看]