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

Chrome扩展点击按钮打开新标签时仅执行指定脚本的实现咨询

代码调整步骤

1. 修改manifest.json

首先删除原有配置中的content_scripts字段,避免myScript.js自动注入所有匹配域名的页面。同时Manifest V2版本的后台配置不支持service_worker,同步修正background配置:

{
    "manifest_version": 2,
    "name": "extension",  
    "description": "extension",  
    "version": "1.0",    
    "browser_action": { 
        "default_popup": "popup.html"  
    },
    "background": {
        "scripts": ["background.js"]
    },
    "permissions": ["tabs", "<all_urls>", "http://*/", "https://*/"]
}

如果后续升级到Manifest V3,只需要把background改回service_worker配置、把browser_action改为action、executeScript调用调整为chrome.scripting.executeScript即可,核心逻辑不变。

2. 调整popup.js逻辑

不需要额外的openTab.js文件,直接在按钮点击回调中完成「创建新标签→监听页面加载完成→注入指定脚本」的全流程:

document.getElementById('myButton').addEventListener('click', () => {
    // 替换为你要打开的目标站点地址
    const targetUrl = "https://xxx.somewebsite.com/xxx";
    // 创建新标签
    chrome.tabs.create({ url: targetUrl }, (newTab) => {
        // 监听新标签的页面加载状态
        function updateListener(tabId, changeInfo, tab) {
            // 仅触发当前新标签、且页面加载完成时执行注入
            if (tabId === newTab.id && changeInfo.status === 'complete') {
                // 注入myScript.js到新标签
                chrome.tabs.executeScript(tabId, { file: "myScript.js" });
                // 移除监听器,避免重复触发
                chrome.tabs.onUpdated.removeListener(updateListener);
            }
        }
        chrome.tabs.onUpdated.addListener(updateListener);
    });
})

实现原理

移除manifest中声明的content_scripts后,脚本不会再自动注入所有匹配域名的页面,只有在点击按钮打开新标签、且页面加载完成后,才会主动调用executeScript注入myScript.js,完全符合仅指定场景执行的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:15:05