首页 >web前端 >js教程 >为什么我的内容脚本无法访问 chrome.tabs 以及如何修复'未定义的引用”错误?

为什么我的内容脚本无法访问 chrome.tabs 以及如何修复'未定义的引用”错误?

Barbara Streisand
Barbara Streisand原创
2024-12-09 22:49:10213浏览

Why Can't My Content Script Access chrome.tabs and How Do I Fix the

内容脚本和 Chrome API:未定义的参考错误

在 Chrome 扩展程序中使用内容脚本时,您可能会遇到错误“无法读取尝试访问 Chrome API(例如 chrome.tabs)时出现“未定义的属性”。尽管在清单中授予了必要的权限,但仍会出现此问题。

了解 Chrome API 可用性

出于安全考虑,内容脚本对 Chrome API 的访问受到限制。在内容脚本中只能访问一组选定的 API:

  • chrome.i18n
  • chrome.dom
  • chrome.storage
  • 子集chrome.runtime/chrome.extension

API,例如chrome.tabs 操作浏览器选项卡,仅在后台脚本(或 Manifest V3 中的 Service Worker)、弹出脚本和其他扩展上下文中可用。

解决方案:消息传递

要访问内容脚本中不可用的 Chrome API,您必须将消息从内容脚本传递到后台脚本。然后后台脚本可以执行 API 操作并将结果发送回内容脚本。

这是演示此方法的代码片段:

// content script:

chrome.runtime.sendMessage({ type: "getTabs" }, function(response) {
  console.log(response.tabs);
});

// background script:

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
  if (request.type == "getTabs") {
    chrome.tabs.query({}, function(tabs) {
      sendResponse({ tabs: tabs });
    });
  }
});

通过遵循此方法,您可以有效地访问内容脚本中不可用的 Chrome API,同时保持安全性和封装性。

以上是为什么我的内容脚本无法访问 chrome.tabs 以及如何修复'未定义的引用”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn