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

Chrome扩展使用chrome.scripting.executeScript注入脚本失败求助

解决Chrome中扩展页面无法注入脚本的问题

错误原因

Chrome的Manifest V3对chrome-extension://协议的扩展自身页面有严格权限限制,默认不允许通过chrome.scripting.executeScript()注入脚本,必须显式声明主机权限;而Firefox对自身扩展页面的权限管控更宽松,因此无此问题。

解决方案

方案一:添加主机权限(适配原executeScript逻辑)

在manifest.json的host_permissions数组中添加对扩展协议的访问权限,即可继续使用scripting.executeScript():

"host_permissions": [
    "*://*/*",
    "chrome-extension://*/*"
],

如果需要更精确的权限控制,可以替换为你的扩展ID对应的URL(如"chrome-extension://abc123def456/*",abc123def456为你的扩展ID)。

方案二:动态加载脚本(更适配用户选项场景)

由于你需要根据用户选项实例化对象,直接在扩展页面内动态创建脚本标签比scripting API更灵活,无需额外权限:
修改main.js代码如下:

document.addEventListener('DOMContentLoaded', function () {
    console.log("on DOMContentLoaded");

    // 读取用户配置选项
    chrome.storage.local.get('userOptions').then(options => {
        // 根据选项判断是否加载脚本
        if (options.enableFeature) {
            const script = document.createElement('script');
            script.src = 'ascript.js';
            script.onload = function() {
                // 脚本加载完成后,根据选项实例化对象
                console.log("ascript加载完成,使用配置:", options);
                // 调用ascript中的方法并传入配置,例如:
                // initCustomObject(options);
            };
            document.body.appendChild(script);
        }
    });
});

这种方式直接在扩展页面的上下文加载脚本,Chrome和Firefox均能正常运行,且完全支持根据用户配置动态初始化对象的需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 20:33:11