如何在WebView中撤销已授予网站的摄像头与麦克风权限?
在WebView中撤销摄像头与麦克风权限的可行方法
Android 平台方案
1. 针对特定网站撤销权限(Android 11+)
通过WebView的PermissionController可精准撤销指定Origin网站的摄像头/麦克风权限,代码示例(Kotlin):
val targetOrigin = Uri.parse("https://your-target-site.com") webView.permissionController.apply { revokePermission(targetOrigin, Manifest.permission.CAMERA, null) revokePermission(targetOrigin, Manifest.permission.RECORD_AUDIO, null) }
2. 清除所有网站的权限记录
若需批量撤销所有网站的权限,可直接清除WebView的权限偏好:
webView.clearPermissionPreferences()
iOS 平台方案
1. 针对特定网站撤销权限
利用WKWebsiteDataStore定位目标网站的权限记录并删除,代码示例(Swift):
let dataStore = WKWebsiteDataStore.default() let permissionTypes = Set([WKWebsiteDataTypePermissions]) dataStore.fetchDataRecords(ofTypes: permissionTypes) { records in let targetRecords = records.filter { $0.displayName == "your-target-site.com" } dataStore.removeData(ofTypes: permissionTypes, for: targetRecords) { // 权限撤销完成 } }
2. 清除所有网站的权限记录
若无需区分网站,直接清除所有权限相关数据:
let dataStore = WKWebsiteDataStore.default() let permissionTypes = Set([WKWebsiteDataTypePermissions]) dataStore.fetchDataRecords(ofTypes: permissionTypes) { records in dataStore.removeData(ofTypes: permissionTypes, for: records) { // 所有权限已清除 } }
跨平台前端注入方案(适用于支持Permissions API的WebView内核)
如果WebView允许注入JavaScript,可直接在页面中调用浏览器的Permissions API撤销权限,代码示例:
// 撤销摄像头权限 navigator.permissions.revoke({ name: 'camera' }).then(res => { console.log("摄像头权限状态:", res.state); }); // 撤销麦克风权限 navigator.permissions.revoke({ name: 'microphone' }).then(res => { console.log("麦克风权限状态:", res.state); });
注意:该API需要WebView内核支持(如Android Chrome 64+、iOS Safari 11.1+对应的WebView),且必须在目标网站的上下文环境中执行。
内容的提问来源于stack exchange,提问作者Hshem 007
相关产品推荐
相关产品推荐

