背景与价值盲目弹窗会导致用户拒绝与疲劳;事先查询并在恰当时机请求可显著提升成功率。查询权限状态async function queryPermission(name: PermissionName) {
if (!('permissions' in navigator)) return 'unsupported';
const status = await (navigator as any).permissions.query({ name });
return status.state; // 'granted' | 'prompt' | 'denied'
}
策略与时机将权限请求放在明确的用户手势后(如点击“使用定位”按钮)。在 `denied` 时提供替代方案与设置引导;避免反复提示。示例:定位权限async function ensureGeolocation() {
const state = await queryPermission('geolocation');
if (state === 'granted') return getPosition();
// 在按钮点击后调用 request
}
function getPosition() {
return new Promise<GeolocationPosition>((resolve, reject) => {
navigator.geolocation.getCurrentPosition(resolve, reject, { enableHighAccuracy: true, timeout: 8000 });
});
}
指标验证(Chrome 128/Edge 130)成功率:在手势驱动与清晰文案下,定位/通知权限成功率 ≥ 92%。误打扰率:≤ 3%(每会话不重复弹窗,提供设置入口)。拒绝后转化:引导设置页后的成功转化 ≥ 30%。回退策略不支持查询:采用懒请求与手势触发;保存拒绝状态避免重复打扰。测试清单不同权限类型:定位/通知/剪贴板等查询与提示路径正确。拒绝路径:不重复弹窗,功能提供合理替代方案。

发表评论 取消回复