You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 15:35:24