You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chrome Extension v3中chrome.scripting.executeScript签名匹配错误求助

Chrome Extension v3 中 chrome.scripting.executeScript 签名不匹配错误修复

问题描述

在Chrome Extension v3应用中,将chrome.tabs.executeScript替换为chrome.scripting.executeScript后,出现**“No matching signature”**错误,无法正常执行脚本注入。

Manifest 配置

{
  "name": "OkBot",
  "description": "OkBot is used as a Personal Asistant.",
  "version": "1.1",
  "manifest_version": 3,
  "content_security_policy": {
    "extension_pages": "script-src 'self'; object-src 'self'"
  },
  "minimum_chrome_version": "88",
  "offline_enabled": false,
  "icons": {
    "48": "web/images/icon_48.png",
    "128": "web/images/icon_128.png"
  },
  "action": {
    "default_icon": {
      "19": "web/images/icon_19.png",
      "38": "web/images/icon_38.png"
    },
    "default_title": "OkBot",
    "default_popup": "popup.html"
  },
  "permissions": [
    "idle",
    "power",
    "management",
    "storage",
    "tabs",
    "activeTab",
    "topSites",
    "scripting"
  ],
  "host_permissions": [
    "*://*/*",
    "<all_urls>"
  ],
  "optional_permissions":[
  ],
  "options_page": "options.html",
  "background":{
    "service_worker":"web/js/background.js"
  },
  "content_scripts": [
    {
      "js": ["web/js/content_script.js"],
      "matches": ["<all_urls>", "*://*/*"]
    }
  ]
}

出错的 OkBot.js 脚本

chrome.scripting.executeScript(tabs[0].id, {file: "web/js/storage.js"}, function() {
    if(chrome.runtime.lastError) 
        chrome.scripting.executeScript(tabs[0].id, {file: "web/js/content.js"}, function() {
            if(chrome.runtime.lastError) {
                console.error(chrome.runtime.lastError.message);
            }
            else
            {
                setTimeout(function(){ 
                    send_to_content(obj); // 注入content.js后再次调用send_to_content(obj)
            }, 300);
        }
    });
});

错误信息

TypeError: 调用scripting.executeScript(scripting.ScriptInjection injection, optional function callback)时出错:无匹配的签名。

修复方案

Chrome Extension v3 中chrome.scripting.executeScript的参数格式与旧版chrome.tabs.executeScript完全不同,核心错误是参数传递不符合API要求:

  • 旧版第一个参数直接传tabId,新版需要将tabId放在target对象内
  • 注入脚本的参数从file改为files(数组格式,支持多文件注入)

修改后的正确代码:

chrome.scripting.executeScript({
    target: {tabId: tabs[0].id},
    files: ["web/js/storage.js"]
}, function() {
    if(chrome.runtime.lastError) {
        chrome.scripting.executeScript({
            target: {tabId: tabs[0].id},
            files: ["web/js/content.js"]
        }, function() {
            if(chrome.runtime.lastError) {
                console.error(chrome.runtime.lastError.message);
            } else {
                setTimeout(function(){ 
                    send_to_content(obj); // 注入content.js后再次调用send_to_content(obj)
                }, 300);
            }
        });
    }
});

关键修改点

  • 第一个参数改为包含target属性的对象,target内指定tabId
  • 将file改为files,值为数组类型(即使只注入单个文件也需要用数组)

内容的提问来源于stack exchange,提问作者DillGates

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 20:27:59