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

Chrome Extension Manifest V3注入本地脚本报错:coolObject未定义求助

问题根源

Chrome扩展的**内容脚本(Content Script)**和页面自身的脚本处于完全隔离的执行上下文。你注入的mycoolscript.js运行在页面的主上下文(将coolObject挂载到页面的window对象),但contentScript.js里的onScriptLoaded函数是在内容脚本的隔离上下文执行的,这里无法直接访问页面上下文的window.coolObject,所以会报“未定义”错误。

而Tampermonkey脚本默认运行在页面主上下文(或可直接访问页面window),因此能正常调用coolObject。

解决方案

把调用coolObject的代码也注入到页面主上下文即可,以下是两种简单实现方式:

方式1:注入内联脚本执行初始化

修改contentScript.js,在mycoolscript.js加载完成后,创建一个内联脚本插入页面,让初始化代码在页面上下文运行:

function addMyCoolScript(){
    var s = document.createElement('script');
    s.src = chrome.runtime.getURL('mycoolscript.js');
    (document.head || document.documentElement).appendChild(s);
    s.onload = function () {
        s.parentNode.removeChild(s);
        // 创建内联脚本,在页面上下文执行coolObject初始化
        const initScript = document.createElement('script');
        initScript.textContent = `
            const apikey = "ABC123";
            const baseUrl = "example.com";
            coolObject.initialize(apikey, { baseUrl: baseUrl });
            coolObject.runStartup();    
            coolObject.openSession();
        `;
        (document.head || document.documentElement).appendChild(initScript);
        initScript.parentNode.removeChild(initScript);
    };
}

方式2:修改mycoolscript.js自带初始化逻辑

如果允许修改mycoolscript.js,可以在脚本末尾直接添加初始化代码,这样脚本加载完成后自动执行:

// mycoolscript.js原代码...
// 末尾添加初始化逻辑
const apikey = "ABC123";
const baseUrl = "example.com";
coolObject.initialize(apikey, { baseUrl: baseUrl });
coolObject.runStartup();    
coolObject.openSession();

这种方式不需要修改contentScript.js的逻辑,脚本注入后会自行完成初始化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:51:31