这是我的background.js文件中的Google Chrome扩展名。在扩展控制台中,我看到了“在选项卡上执行脚本”,但我看不到“执行的注入脚本”。我不知道为什么功能不起作用?清单。JSON具有这样的权限:
"permissions": ["contextMenus", "activeTab", "storage", "scripting"],
"background": {
"service_worker": "background.js"
},
"host_permissions": ["<all_urls>"]```
chrome.contextMenus.onClicked.addListener((info, tab) => {
console.log("Context menu clicked"); // Check if it's triggered
if (info.menuItemId === "saveWord") {
if (tab && tab.id) {
console.log("Executing script on tab", tab); // Check if tab is available
chrome.scripting.executeScript({
target: { tabId: tab.id },
func: () => {
console.log("Injected script executed");
}
})
}
}
});
如果没有正确执行您的功能,则可能有几个原因。以下是一些常见的问题和解决方案:
✅chrome.scripting.executeScript
中所需的权限
从v3中,manifest.json
已由
chrome.tabs.executeScript
取代。确保您的chrome.scripting.executeScript
包含正确的权限:manifest.json
Copiasreditar
{
json
如果缺少
"manifest_version": 3, "name": "My Extension", "version": "1.0", "permissions": ["scripting", "activeTab"], "host_permissions": ["<all_urls>"], "background": { "service_worker": "background.js" } }
或"scripting"
,
"activeTab"
将不运行。
✅2。确保您的功能是独立的函数传递给
executeScript
chrome.scripting.executeScript
Copiasreditarlet
javascript
✅solution:使用
message = "Hello world"; chrome.scripting.executeScript({ target: {tabId: tab.id}, function: () => console.log(message) });
传递外部数据:
args
Copiasreditar
chrome.
javascript
✅3。确保您获得正确的
scripting.executeScript({ target: {tabId: tab.id}, function: (msg) => console.log(msg), args: ["Hello world"] });
如果您正在从一个服务工作者那里运行。
tabId
Copiasreditar
chrome.
executeScript
Chrome WebStoreGmail
内部铬页(
tabId
)✅5。检查控制台错误
javascript
→
tabs.query({active: true, currentWindow: true}, function(tabs) { let tabId = tabs[0].id; chrome.scripting.executeScript({ target: {tabId: tabId}, function: () => console.log("Script executed in the active tab") }); });
chrome://...
chrome.scripting.executeScript