如何检测Chrome用户是否已禁用受版权保护的媒体内容?
检测Chrome用户是否禁用受版权保护的媒体内容
你提到的'navigator' in window && 'requestMediaKeySystemAccess' in window.navigator只能判断浏览器本身是否支持DRM API,无法区分用户是否手动禁用了受保护媒体内容。要检测用户的禁用状态,需要实际调用DRM权限请求API并捕获错误——当用户禁用该设置时,API调用会抛出特定错误。
可行的检测方案
核心思路是调用navigator.requestMediaKeySystemAccess请求常见DRM系统的权限,根据是否抛出权限类错误判断用户状态:
async function isProtectedMediaAllowed() { try { // 选择Chrome支持的Widevine DRM系统 const keySystem = 'com.widevine.alpha'; // 配置基础的音视频能力要求 const mediaConfig = [{ initDataTypes: ['cenc'], audioCapabilities: [{ contentType: 'audio/mp4; codecs="mp4a.40.2"' }], videoCapabilities: [{ contentType: 'video/mp4; codecs="avc1.42E01E"' }] }]; // 请求DRM权限 await navigator.requestMediaKeySystemAccess(keySystem, mediaConfig); return true; // 用户未禁用受保护媒体内容 } catch (err) { // 捕获用户禁用导致的权限错误 if (err.name === 'NotAllowedError' || err.name === 'SecurityError') { return false; // 用户已禁用受保护媒体内容 } // 其他错误(如浏览器不支持该DRM),返回null表示无法确定 return null; } } // 使用示例 isProtectedMediaAllowed().then(status => { if (status === false) { console.log('用户已禁用受版权保护的媒体内容'); // 在这里显示提示,引导用户前往Chrome设置开启该选项 } else if (status === true) { console.log('用户允许播放受版权保护的媒体内容'); } else { console.log('浏览器不支持目标DRM系统'); } });
原理说明
当用户在Chrome的隐私安全设置中禁用“受版权保护的媒体内容”后,浏览器会拒绝所有DRM权限请求,此时requestMediaKeySystemAccess会抛出NotAllowedError或SecurityError。通过捕获这些特定错误,就能准确判断用户的禁用状态。
像Netflix这类平台就是基于类似逻辑实现的检测,在播放前验证DRM权限,若失败则引导用户调整设置。
内容的提问来源于stack exchange,提问作者Samdalu
相关产品推荐
相关产品推荐

