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

Manifest V2转V3:chrome.scripting.executeScript无法注入值问题

Chrome扩展V2转V3:脚本注入失败的解决方案

你的问题出在两个关键点:原V2的runAt执行时机没保留,以及V3中func参数的使用方式不符合逻辑。以下是具体修复方案:

方案一:沿用code参数(最贴近原V2逻辑)

V3的chrome.scripting.executeScript依然支持code参数,直接复用原字符串代码即可,同时保留runAt确保脚本在正确时机执行:

chrome.scripting.executeScript({ 
  target: {tabId: tabid},
  code: appssoscript[0].chrome,
  runAt: 'document_start' // 关键:保留原V2的执行时机
});

方案二:正确使用func参数(更安全的方式)

如果想通过func传递逻辑,不要传入字符串代码,而是直接将DOM操作逻辑封装成函数,传递具体参数:

// 定义注入到页面的函数
function fillLoginForm(username, password, buttonSelector) {
  document.getElementById("username").value = username;
  document.getElementById("password").value = password;
  document.querySelector(buttonSelector).click();
}

// 调用脚本注入
chrome.scripting.executeScript({ 
  target: {tabId: tabid},
  func: fillLoginForm,
  args: ["application_user1", "Passw0rd@123", ".from__button--floating"],
  runAt: 'document_start'
});

必要的权限配置

确保你的manifest.json中添加了V3所需的权限:

{
  "permissions": ["scripting"],
  "host_permissions": ["<all_urls>"] // 替换为你需要注入的具体网站域名,比如"https://example.com/*"
}

原代码失败原因

  1. 缺失runAt配置:原V2代码指定了document_start,确保脚本在DOM初始化时执行,而你的V3代码没加这个,导致脚本可能在元素未加载时执行,找不到目标DOM节点。
  2. func参数使用错误:func是直接注入函数到页面上下文执行,而非执行字符串代码。如果你的getScript函数是尝试eval传入的字符串,会因为上下文隔离、转义问题或安全限制导致失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 10:13:07