首頁 >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