@canonical/cookie-policy

中文文档
4.0.0发布于 2026/11/04ISCES Module零依赖近 30 天下载 2.1万

A script and style sheet that displays a cookie policy notification

原始使用文档
文档目录12 节
  1. Usage
  2. Fonts
  3. cookiePolicy parameters
  4. Revoking the cookie policy
  5. Visiting a page with tracker disabled
  6. Callback hook
  7. Shared cookie service
  8. Cookie groups
  9. APIs - /_cookies/set-preferences
  10. Contributing
  11. Building the cookie policy
  12. Hacking

Canonical cookie policy component

This project contains the scripts and styles to display a cookie policy notification on a web page.

You can use it to display a custom cookies message of your choosing on your own web page.

Usage

This project can be installed via an NPM package.

yarn add @canonical/cookie-policy

...or...

npm install @canonical/cookie-policy

You can then install the library either by directly linking to it or via an ES6 import.

  1. Via direct link

To consume the library directly, add a link to the JS file containing an IIFE and call the lib:

<script src="[ INSERT YOUR LOCAL PATH ]/js/cookie-policy.js"></script>
<script>
  cpNs.cookiePolicy();
</script>
  1. Via ES6 import
import { cookiePolicy } from '@canonical/cookie-policy';

Fonts

From version 4.0.0 the cookie policy styles no longer include the Ubuntu font. The banner uses "Ubuntu variable" but expects the page to load it.

  • If your site uses Vanilla, you already have it: Vanilla's base styles include the font.
  • If your site hosts the font itself, nothing changes: the banner uses your @font-face rules.
  • Otherwise, add these rules to your site's CSS:
@font-face {
  font-family: "Ubuntu variable";
  font-stretch: 100%;
  font-style: normal;
  font-weight: 100 800;
  font-display: swap;
  src: url("https://assets.ubuntu.com/v1/f1ea362b-Ubuntu%5Bwdth,wght%5D-latin-v0.896a.woff2") format("woff2");
}

@font-face {
  font-family: "Ubuntu variable";
  font-stretch: 100%;
  font-style: italic;
  font-weight: 100 800;
  font-display: swap;
  src: url("https://assets.ubuntu.com/v1/90b59210-Ubuntu-Italic%5Bwdth,wght%5D-latin-v0.896a.woff2") format("woff2");
}

These are the same files Vanilla loads. Without them the banner falls back to a system font.

cookiePolicy parameters

The cookie policy function that sets up the cookie policy takes two possible parameters:

  1. callback (default = null) - a callback function, which is called after a user selects there cookie preferences
  2. initWithCookieService (default = false) - a bool, that dictates whether to try and intergrate with our share cookie service

If you would like users to change their preferences you can add js-revoke-cookie-manager class to any element that is present in the document to recall the policy manager.

<button class="js-revoke-cookie-manager">Revoke cookie manager</button>

or

<a href="" class="js-revoke-cookie-manager">Revoke cookie manager</a>

Visiting a page with tracker disabled

If you add the query ?cp=hide to any URL the cookie policy will not be rendered. The main use case is to visit the policy page without the modal blocking the content.

Callback hook

You can set up the cookie policy with a callback when a preference is selected.

function callbackFunction() {
  alert('Calling back');
}
cpNs.cookiePolicy(callbackFunction);

If initWithCookieService = true, this triggers the calling of the function initSharedCookieService(), and means the cookie policy will attempt to retrieve the users cookie preferences from our cookie database. This requires the Flask extension canonicalwebteam.cookie_service to be intergrated into the project.

If initWithCookieService = false or is not passed, the cookie policy will only use cookies set on that specific site.

The shared cookie service logic sets the following additional cookies:

  • _cookies_accepted: all|performance|functional|essential|unset: The preference selected by the user.
  • _cookies_freshness_ts: <timestamp>: This is used to ensure the cookie that has been set is fresh by 1 day. If it is not, it will query the central service for the most up to date cookie.
  • _cookies_set_offline: true | null: This flag is set if a cookie preference was set while the cookie serivce was unavailable. Next time the service is up the cookie preferences will be synced and the flag removed.

An additional cookie is set by the Flask extension canonicalwebteam.cookie_service:

  • _cookies_auth_token: <encrypted_token>: Used to identify the user between different sites. This is stored centrally as https://cookies.canonical.com, as a session cookie.
  • _cookies_redirect_attempted: 1 | null: This is a flag to signal that the redirect to the central service, required for authentication and initial setting of _cookies_auth_token, was attempted (whether successful or not). It expires at the end of the session.

Full example via ES6 import

import { cookiePolicy } from '@canonical/cookie-policy';

cookiePolicy();

Essential cookies are always allowed, unless the user turns them off in their browser. Otherwise, there will be a series of values the _cookies_accepted cookie can contain :

Cookie valueDescriptionNote
allAll cookies accepted by the user. Currently used by the existing widgetPrevious value was true. Using the same cookie.
essentialEssential cookies accepted.This is used to hide the notification instead of not setting the cookie
performancePerformance cookies accepted.-
functionalityFunctionality cookies accepted.-

APIs - /_cookies/set-preferences

This package will attempt to POST users cookie preferences to our shared cookie service (cookies.canonical.com). This is handled by a Python package, canonicalwebteam.cookies_service, that expose an internal endpoint '/_cookies/set-preferences', The attempt to POST will only be made providing the cookie _cookies_service_up=1 exists. Applications not using the aforementioned Python package will not attempt to POST the users preferences.

Contributing

If you would like to help improve this project, here is a list of commands to help you get started.

Install the requisite dependencies;

npm install

To build the JS and CSS into the build folder, run:

npm run build

You can view the build files in action by running:

npm run serve

And, visiting http://0.0.0.0:8301/

Hacking

When developing this project you can run the following command to listen to changes in the src/js/*js and src/sass/*scss folders and build them into the /build folder.

npm run watch

Before submitting your pull request, run the linters, which checks both the JS and Sass for errors.

npm run test

Code licensed LGPLv3 by Canonical Ltd.

With ♥ from Canonical

版本与发布记录

@canonical/cookie-policy 共发布 38 个版本,首次发布于 2019/05/07;过去 12 个月发布了 14 个版本。

版本发布日期距今
4.0.0latest2026/11/045 天前
3.10.02026/03/078 个月前
3.9.02026/02/248 个月前
3.8.42025/12/1110 个月前
3.8.32025/12/0910 个月前
3.8.22025/12/0411 个月前

关于 @canonical/cookie-policy 的常见问题

@canonical/cookie-policy 是什么?

A script and style sheet that displays a cookie policy notification

如何安装 @canonical/cookie-policy?

在项目目录运行 npm install @canonical/cookie-policy,或使用 pnpm add / yarn add / bun add。

@canonical/cookie-policy 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/canonical__cookie-policy 是否存在。

@canonical/cookie-policy 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@canonical/cookie-policy 可以商用吗?

@canonical/cookie-policy 使用 ISC 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@canonical/cookie-policy 的下载量有多少?

根据 npm 官方下载统计,@canonical/cookie-policy 在 2026/10/09 – 2026/11/07 这 30 天内被下载 21,126 次,日均约 704 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@canonical/cookie-policy 还在维护吗?

最新版本 4.0.0 发布于 2026/11/04(5 天前);至今共发布 38 个版本,其中过去 12 个月发布了 14 个;首次发布于 2019/05/07。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。