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/*" }
原代码失败原因
- 缺失
runAt配置:原V2代码指定了document_start,确保脚本在DOM初始化时执行,而你的V3代码没加这个,导致脚本可能在元素未加载时执行,找不到目标DOM节点。 func参数使用错误:func是直接注入函数到页面上下文执行,而非执行字符串代码。如果你的getScript函数是尝试eval传入的字符串,会因为上下文隔离、转义问题或安全限制导致失败。
内容的提问来源于stack exchange,提问作者Kishen RC
相关产品推荐
相关产品推荐

