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

Chrome扩展ManifestV3中chrome.scripting.executeScript函数未定义或无法调用问题求助

问题分析与解决方案

嘿,我一眼就看出你遇到的TypeError: Cannot read property 'executeScript' of undefined是两个关键问题导致的,咱们一步步来解决:

1. 缺失scripting权限声明

在Manifest V3里,chrome.scripting API是需要单独申请权限的!你当前的manifest.json里的permissions数组完全没包含"scripting",浏览器自然不会给你的扩展暴露这个API对象,这就是为什么会出现“找不到executeScript属性”的错误。

2. 未指定脚本注入的目标标签页

Manifest V3不再支持默认注入到当前活跃标签页的写法,chrome.scripting.executeScript必须通过target参数明确指定要注入的标签页ID,否则根本不知道该往哪里注入脚本。


具体修复步骤:

第一步:更新manifest.json添加权限

在permissions数组里加上"scripting":

{ 
  "manifest_version": 3, 
  "name": "TennisBet", 
  "version": "1.0", 
  "description": "Extension for bet on tennis.", 
  "action": { 
    "default_icon": { 
      "256": "images/tennis256.png", 
      "128": "images/tennis128.png", 
      "64": "images/tennis64.png", 
      "32": "images/tennis32.png", 
      "24": "images/tennis24.png", 
      "16": "images/tennis16.png" 
    }, 
    "default_popup": "popup/popup.html" 
  }, 
  "background": { 
    "service_worker": "background-wrapper.js" 
  }, 
  "host_permissions": ["*://*/*"], 
  "permissions": [ 
    "tabs", 
    "alarms", 
    "activeTab", 
    "declarativeContent", 
    "storage",
    "scripting"  // 新增这个权限
  ] 
}

第二步:修改background.js的消息处理逻辑

先获取当前活跃的标签页,再把它作为目标传入executeScript:

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { 
  switch(request.from){ 
    case "error": 
      console.log(request.message); 
      break; 
    case "checkTabs": 
      tabsWorker(); 
      break; 
    case "newScript": 
      // 获取当前窗口的活跃标签页
      chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
        if(tabs.length > 0) {
          chrome.scripting.executeScript({
            target: {tabId: tabs[0].id},  // 指定要注入的标签页ID
            file: "content_scripts/cscript.js" 
          }).then(() => {
            console.log("内容脚本注入成功");
          }).catch(err => {
            console.error("注入失败:", err);
          });
        }
      });
      break; 
    default: 
      console.log("Message listener status active"); 
      break; 
  } 
});

额外小提示:

  • 从popup发送消息时,sender.tab会是null(因为popup本身不是标签页),所以必须用chrome.tabs.query来获取活跃标签页。
  • 确认你的content_scripts/cscript.js路径是正确的,要相对于扩展的根目录哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 09:49:09