调用IsAttentiveAvailable报analytics of undefined错误如何解决
报错原因
- 判断逻辑存在层级遗漏:代码直接访问
window.attentive.analytics,但当Attentive SDK还未初始化完成时,window.attentive本身就是undefined,访问undefined的属性会直接抛出cannot read property analytics of undefined错误 - 调用时机早于SDK加载完成时间:页面加载阶段直接执行
IsAttentiveAvailable(),此时Attentive SDK的资源还没加载完成,全局还没有挂载window.attentive对象
修复方案
1. 优化存在性判断逻辑
先判断上层window.attentive是否存在,再判断下层的analytics属性,推荐两种写法:
// 兼容旧环境的分步判断写法 export function IsAttentiveAvailable() { if(typeof window !== 'undefined' && typeof window.attentive !== 'undefined' && typeof window.attentive.analytics !== 'undefined') { return true; } return false; } // 现代JS环境的简化写法(使用可选链) export function IsAttentiveAvailable() { return typeof window !== 'undefined' && !!window.attentive?.analytics; }
2. 调整方法调用时机
确保IsAttentiveAvailable()只在Attentive SDK加载完成后调用,常见处理方案:
- 将调用逻辑绑定到Attentive SDK的加载完成回调事件中
- 如果是通过script标签引入SDK,可给script标签添加
defer属性,或者将调用代码放在window.load事件回调内执行
内容的提问来源于stack exchange,提问作者user16756868
相关产品推荐
相关产品推荐

