为什么我不能从chrome.scripting.executescript

问题描述 投票:0回答:1

这是我的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");
                  }
            })
        }
    }
});
google-chrome-extension
1个回答
0
投票

如果没有正确执行您的功能,则可能有几个原因。以下是一些常见的问题和解决方案:



✅1。检查

chrome.scripting.executeScript
中所需的权限
从v3

manifestv3

中,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
cannot取决于外部变量。

这将失败:

chrome.scripting.executeScript

Copiasreditar
letjavascript

✅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


✅4。一些页面阻止脚本执行

chrome
blocks脚本在某些页面上运行

,包括:

Chrome WebStore

Gmail

内部铬页(
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


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.