首页 >web前端 >js教程 >为什么从内容脚本访问 Chrome API 时出现'无法读取未定义的属性”?

为什么从内容脚本访问 Chrome API 时出现'无法读取未定义的属性”?

DDD
DDD原创
2024-12-03 02:56:09334浏览

Why Do I Get

从内容脚本访问 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中文网其他相关文章!

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