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

使用Chrome API topSites获取常用站点失败,报错Cannot read property 'get' of undefined

解决Chrome扩展中chrome.topSites.get()报错"Cannot read property 'get' of undefined"的问题

看起来你已经在manifest里声明了权限,但还是遇到了这个API未定义的错误,我来帮你梳理几个最可能的原因和解决办法:

1. 检查权限声明的拼写正确性

Chrome的权限名称是区分大小写的,你需要确保manifest.json里的权限是精确的"topSites",而不是小写的"topsites"或者其他拼写错误。正确的权限声明应该是这样的:

{
  "manifest_version": 2, // 或者 3
  "permissions": [
    "topSites"
  ],
  // 其他配置项...
}

2. 适配Manifest版本的API调用方式

如果你使用的是Manifest V3,虽然chrome.topSites依然可用,但它现在支持Promise语法(回调方式也兼容,但Promise更推荐),可以尝试换用Promise写法来排除回调的潜在问题:

// Manifest V3 推荐写法
chrome.topSites.get()
  .then(sites => {
    console.log("最常访问站点列表:", sites);
  })
  .catch(error => {
    console.error("获取站点失败:", error);
  });

如果是Manifest V2,回调写法本身是没问题的,但要确保你的后台脚本是在正确的上下文里运行(比如直接作为background字段指定的脚本,而不是嵌入在后台HTML里的延迟加载脚本)。

3. 避免在扩展未初始化时调用API

有时候如果脚本在扩展还没完全加载完成时就调用chrome.topSites.get(),会导致API还未被注入到上下文里。你可以把调用逻辑放在扩展初始化完成的事件回调中,确保API已经准备好:

// 适配Manifest V2和V3
chrome.runtime.onStartup.addListener(() => {
  // 扩展启动完成后再调用API
  chrome.topSites.get((arr) => {
    console.log(arr);
  });
});

// 或者在扩展安装/更新后触发
chrome.runtime.onInstalled.addListener(() => {
  chrome.topSites.get((arr) => {
    console.log(arr);
  });
});

4. 验证扩展的加载状态

你可以打开Chrome的扩展管理页面(chrome://extensions/),确保你的扩展是启用状态,并且没有其他报错。如果有其他权限或者配置错误,也可能导致API无法正常加载。

按照上面的步骤排查,应该能解决这个问题。

内容的提问来源于stack exchange,提问作者pythonNovice

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 16:27:36