隐形模式
隐形模式通过你自己的代码求解质询,页面上不显示任何内容。它适合点赞按钮、后台请求等没有表单的操作。
js
import Cap from "cap-widget";
const cap = new Cap({ apiEndpoint: "https://cap.example.com/<site-key>/" });
const { token } = await cap.solve();使用 CDN 脚本时,Cap 是全局变量,无需导入。
API
new Cap(config, element?)
除非设置了 CAP_CUSTOM_FETCH,否则 config.apiEndpoint 为必填项。其他键都会设置为验证组件的属性,因此验证组件属性在这里也适用:
js
const cap = new Cap({
apiEndpoint: "https://cap.example.com/<site-key>/",
"data-cap-worker-count": "4",
});未传入 element 时,Cap 会创建一个关闭触感反馈的隐藏 <cap-widget>。隐藏的验证组件不会提前获取或求解任何质询,因此所有工作都会在你调用 solve() 时开始。传入现有的验证组件,则会操作该组件。
cap.solve()
请求并求解一个质询。Promise 成功时返回 { success, token }。
失败时会触发 error 事件,并以一个 Error 拒绝 Promise,其 code 为错误码之一,例如框架被拦截时的 instr_csp_blocked:
js
try {
const { token } = await cap.solve();
} catch (err) {
console.error(err.code, err.message);
}如果调用时已有求解正在进行,此次调用会返回成功状态的 Promise,结果为 undefined。
cap.token
最近一次求解得到的令牌,或 null。
cap.reset()
清除令牌。
cap.addEventListener(type, listener)
监听验证组件的事件:
js
cap.addEventListener("progress", (e) => {
console.log(`${e.detail.progress}%`);
});启用行为评分的密钥
隐形求解没有针对验证组件的点击。在启用行为评分的密钥上,其判定为 no_interaction,因此当密钥开启拦截并要求交互时,求解会失败。在核心库中,请为这些路由的 behavior 策略设置 requireInteraction: false。
