marknotton/agent

用于查询用户代理数据的Jens Segers Agent工具的扩展。

5.0.0 2024-02-24 23:35 UTC

This package is auto-updated.

Last update: 2024-09-25 00:47:02 UTC


README

Agent: An extension to Jens Segers Agent tool for querying user agent data.

安装

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插件设置

User Agent Whitelist

版本

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>。您需要通过插件设置启用此功能。

Agent CMS Toggle Option

这将定义全局属性到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" 变更日志以获取建议和修复方法。[请点击此处查看]