Facebook登录报Cannot redefine property: cookie未捕获Promise错误求助
问题原因
该错误由浏览器端安装的隐私保护/广告拦截类扩展触发,这类扩展为了实现反跟踪功能,会尝试重写document.cookie属性拦截Cookie读写,且重写时未设置configurable: true标识,而你在Facebook SDK初始化时开启了cookie: true配置,SDK的Cookie操作逻辑会触发第二次cookie属性重写,直接抛出不可重定义的错误。
你的业务代码和Facebook官方SDK本身没有逻辑问题。
验证方案
- 切换浏览器无痕模式,或者禁用所有已安装的浏览器扩展后重新加载页面,若错误消失即可确认是扩展冲突导致
- 使用无额外扩展的原生浏览器打开页面测试,也可验证问题来源
可行解决方案
方案1:修改SDK初始化配置(优先推荐)
如果你的业务逻辑不需要后端直接读取Facebook生成的Cookie,仅需要前端获取accessToken传给后端做校验,直接将FB初始化配置中的cookie: true改为cookie: false即可,该改动不会影响常规登录流程的正常运行:
FB.init({ appId: '***MYAPPID***', cookie: false, // 关闭Cookie写入即可避免和扩展的重写逻辑冲突 xfbml: true, version: 'v10.0' });
方案2:添加错误捕获兜底
如果业务必须开启cookie: true配置,可以给初始化逻辑添加错误捕获,忽略该非致命错误,避免阻塞后续业务代码执行:
window.fbAsyncInit = function () { try { FB.init({ appId: '***MYAPPID***', cookie: true, xfbml: true, version: 'v10.0' }); FB.getLoginStatus(function (response) { statusChangeCallback(response); }); } catch (err) { // 仅忽略Cookie重定义错误,其他异常继续抛出 if (!err.message.includes('Cannot redefine property: cookie')) { throw err; } // 错误不影响登录状态获取,可主动触发一次状态校验 FB.getLoginStatus(function (response) { statusChangeCallback(response); }); } };
方案3:用户引导
如果业务强依赖Facebook SDK的Cookie能力,可在捕获到对应错误时,弹出提示引导用户临时禁用相关隐私拦截扩展后再使用登录功能。
内容的提问来源于stack exchange,提问作者Aşkın
相关产品推荐
相关产品推荐

