背景与价值设备接口权限敏感,需严格治理来源与触发方式,避免越权或钓鱼行为。统一规范来源白名单:仅允许受控域使用设备接口。用户手势:仅在点击等用户手势触发时调用。权限提示:统一提示与撤销入口。核心实现来源与用户手势校验const allowOrigins = new Set(['https://app.example.com'])

function originAllowed(): boolean { try { const u = new URL(document.location.href); return allowOrigins.has(u.origin) } catch { return false } }

async function connectUsb(button: HTMLButtonElement): Promise<boolean> {

if (!originAllowed()) return false

let ok = false

button.addEventListener('click', async () => {

try {

const d = await (navigator as any).usb.requestDevice({ filters: [] })

ok = !!d

} catch { ok = false }

}, { once: true })

button.click()

return ok

}

async function connectBle(button: HTMLButtonElement): Promise<boolean> {

if (!originAllowed()) return false

let ok = false

button.addEventListener('click', async () => {

try {

const d = await (navigator as any).bluetooth.requestDevice({ acceptAllDevices: false, filters: [] })

ok = !!d

} catch { ok = false }

}, { once: true })

button.click()

return ok

}

落地建议在受控来源下并以用户手势触发设备权限,提示用户与提供撤销入口。验证清单是否仅在受控来源与用户手势触发;权限提示与撤销是否可用。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部