从内容脚本访问 Chrome API:解决“无法读取未定义的属性”错误
从以下位置访问 Chrome API(例如 chrome.tabs)时在内容脚本中,开发人员可能会遇到“无法读取未定义的属性”错误。出现此错误的原因是内容脚本对 Chrome API 的访问权限受到限制。
问题中提供的清单文件中的权限部分包含选项卡权限。但是,此权限仅授予对后台脚本、弹出脚本或服务工作线程中的选项卡 API 的访问权限。
错误原因
内容脚本被注入到 web 中页面并具有一组有限的可以使用的 API。这些 API 包括:chrome.i18n、chrome.dom、chrome.storage 以及 chrome.runtime 和 chrome.extension 的子集。像 chrome.tabs 这样操作浏览器选项卡和窗口的 API 在内容脚本中不可用。
解决方案
要解决此错误,解决方案是传递从内容脚本到后台脚本的消息。然后,后台脚本可以使用 chrome.tabs API 并响应来自内容脚本的消息。
以下是示例实现:
内容脚本:
chrome.runtime.sendMessage({ action: "getTabsInfo" }, (response) => { // Process the response from the background script });
背景script:
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { if (request.action === "getTabsInfo") { chrome.tabs.query({}, (tabs) => { sendResponse({ tabs }); }); return true; } });
通过使用此方法,内容脚本可以通过向后台脚本发送消息来访问 Chrome API。
以上是为什么从内容脚本访问 Chrome API 时出现'无法读取未定义的属性”?的详细内容。更多信息请关注PHP中文网其他相关文章!