我正在编写一个 chrome 扩展(Manifest V3),我试图通过设置
window
属性(因为我稍后使用它几次)来让内容脚本知道选项卡 ID 是什么。我在我的 executeScript()
中使用 background.js
按以下方式执行此操作:
function setTabIDInContent(id) {
window.tabId = id; }
chrome.tabs.onUpdated.addListener(async (tabId, changeInfo, tab) => {
if (tab.url?.startsWith("chrome://")) return undefined;
chrome.scripting.executeScript({
target: { tabId: tabId },
args: [tabId],
world: "MAIN",
func: setTabIDInContent
});
});
在我的内容脚本中,我有一个按以下方式定义的侦听器:
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
sendResponse({tabId: window.tabId,
info: 'other stuff'});
});
我正在观察这种奇怪的行为:
window.tabId
将打印正确的值。window.tabId
变为 undefined
。在内容脚本的侦听器方法中放置断点,我在执行过程中验证了window.tabId
确实是undefined
。监听器执行完毕后,当我回到控制台窗口并输入window.tabId
时,我看到它已经变成了undefined
,那里很好。为什么会发生这种情况以及我可以做什么来保持这个值?