← API 文档 压缩包 manifest.json background.js popup.html popup.js
options.js
Publishers
SDK 接入与用户同意
SDK 会采集 URL 和搜索查询,因此依据 GDPR(第 6 条)和 ePrivacy(第 5(3) 条)需要用户的明确同意。在用户点击「允许」之前,SDK 不创建标识符、不存储事件、也不与服务器通信。您的扩展功能不受该选择影响。
Manifest V3 Opt-in Shadow DOM
安装
在控制台中:扩展 → SDK → 「下载」。将压缩包解压到扩展根目录。
intentd.min.js 带有您扩展密钥的 SDK —— 请勿重命名
intentd-consent.html 面向无 popup 扩展的同意页面
intentd-consent.js 该页面的脚本(MV3 禁止内联脚本) {
"manifest_version": 3,
"background": { "service_worker": "background.js", "type": "module" },
"action": { "default_popup": "popup.html" },
"permissions": ["storage", "webNavigation", "tabs", "alarms", "unlimitedStorage"],
"host_permissions": ["https://api.intentd.io/*"]
} // background.js —— 第一行,顶层作用域
import './intentd.min.js'; Consent Flow
带 popup 的扩展
在 popup 中调用 IntentD.mountConsent() 。如果不调用,用户就只会在安装时看到同意标签页,而 SDK 会一直处于停用状态直到用户做出选择 —— 调用的责任在扩展一方。
<div id="consent-root"></div>
<!-- ... 您的扩展界面 ... -->
<script src="intentd.min.js"></script>
<script src="popup.js"></script> // 只有在没有针对当前文本版本的同意时,提示条才会出现。
// Promise 以用户的选择解析:true —— 允许,false —— 拒绝。
IntentD.mountConsent(document.getElementById('consent-root')); 提示条渲染在封闭的 Shadow DOM 中:您的样式不会影响它,它的样式也不会影响您。主题(浅色或深色)根据 popup 背景选取,宽度介于 320 到 800 px 之间。「拒绝」和「允许」按钮尺寸相同,也没有预先勾选的选项。同意之后提示条消失且不再出现;拒绝之后会在下次打开 popup 时再次出现。
不带 popup 的扩展
只要还没有同意,SDK 会在安装时和浏览器启动时自行打开 intentd-consent.html 标签页。不会打开第二个标签页 —— 已有的那个会获得焦点。用户做出选择后标签页会关闭。
何时显示提示
| 事件 | 行为 |
|---|---|
| 安装或更新扩展 | 若没有针对当前文本版本的同意,则打开同意标签页 |
| 浏览器启动 | 同意标签页 —— 仅限没有 popup 的扩展 |
| 打开 popup | 若您调用了 mountConsent 且没有同意,则显示提示条 |
| service worker 的其他唤醒 | 不显示任何内容 |
| 已经给出同意 | 不再显示提示条 |
| 同意文本版本变更 | 重新征求同意 |
撤回同意
同意文本向用户承诺可以在设置中撤回。请在您的设置页面加入一个开关:
const allowed = await IntentD.hasConsent();
// 「撤回同意」按钮
await IntentD.revokeConsent(); // 停止采集,删除本地数据
// 「允许采集」按钮(例如在拒绝之后)
await IntentD.grantConsent(); 请勿把同意页面加入 web_accessible_resources
扩展自身访问其页面并不需要这个列表。一旦该页面变为 web-accessible,任何网站都能把它放进 iframe 并悄悄骗取一次「允许」点击 —— 这样得到的同意是无效的。
API
| 方法 | 用途 |
|---|---|
| IntentD.mountConsent(element) | 在没有同意时于 popup 中显示提示条。Promise<boolean>。 |
| IntentD.hasConsent() | 是否存在针对当前文本版本的同意。Promise<boolean>。 |
| IntentD.getConsentState() | 'approved' | 'declined' | null。 |
| IntentD.grantConsent() | 记录同意(来自您自己的界面)。 |
| IntentD.revokeConsent() | 撤回:停止采集,删除队列和安装标识符。 |
| IntentD.openConsentTab() | 手动打开同意标签页(或聚焦已打开的那个)。 |
| IntentD.status() | SDK 状态,包含 consent。 |
该决定只保存在当前浏览器配置文件的 chrome.storage.local 中:每台设备单独询问,服务器不记录谁在何时同意。随每个数据包发往服务器的只有同意文本的版本号。