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

如何利用eval函数运行JavaScript实现Chrome扩展禁用?

问题分析与解决方案

首先明确几个核心限制,你的现有代码根本无法实现需求:

  • 同源策略拦截:你打开的是谷歌商店页面,和你的index.html属于不同域名,浏览器的跨域安全规则会完全阻止你对newWin对象的任何脚本操作,包括调用fetch和eval。
  • Chrome API权限限制:chrome.management API是Chrome扩展专属API,普通网页没有权限调用这个接口,只有Chrome扩展本身才能访问。
  • 代码逻辑缺陷:用for...in遍历数组会遍历到数组的原型属性,应该用forEach或for...of;回调里的disabled变量没有做递增操作,无法统计成功禁用的扩展数量。

正确实现方式:基于Chrome扩展开发

要实现禁用指定扩展的功能,必须通过Chrome扩展来完成,以下是完整的实现步骤:

1. 编写扩展清单文件 manifest.json

{
  "manifest_version": 3,
  "name": "Extension Disabler",
  "version": "1.0",
  "permissions": ["management"],
  "action": {
    "default_popup": "popup.html"
  },
  "background": {
    "service_worker": "background.js"
  }
}

2. 编写背景脚本 background.js

// 监听来自弹出页的禁用请求
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
  if (request.action === "disableExtensions") {
    const extensions = [
      'icmgjiknkpcfkhgajgmpkkehdjmidlgl',
      'adkcpkpghahmbopkjchobieckeoaoeem',
      'cgbbbjmgdpnifijconhamggjehlamcif',
      'kkbmdgjggcdajckdlbngdjonpchpaiea',
      'dmdmgaepfoakhbmfckjjfilpgmceocgl'
    ];
    let disabledCount = 0;
    const total = extensions.length;

    extensions.forEach(extId => {
      chrome.management.setEnabled(extId, false, () => {
        disabledCount++;
        // 所有扩展处理完成后发送结果
        if (disabledCount === total) {
          sendResponse({status: "success", count: disabledCount});
        }
      });
    });
    // 告诉Chrome要异步发送响应
    return true;
  }
});

3. 编写弹出页 popup.html

<!DOCTYPE html>
<html>
<head>
  <style>
    button { padding: 8px 16px; cursor: pointer; }
  </style>
</head>
<body>
  <button id="disableBtn">禁用指定扩展</button>
  <script>
    document.getElementById('disableBtn').addEventListener('click', () => {
      chrome.runtime.sendMessage({action: "disableExtensions"}, (response) => {
        alert(`已成功禁用 ${response.count} 个扩展`);
        window.close();
      });
    });
  </script>
</body>
</html>

测试步骤

  1. 创建一个文件夹,把上述三个文件放入其中。
  2. 打开Chrome浏览器,进入chrome://extensions/页面,开启右上角的"开发者模式"。
  3. 点击"加载已解压的扩展程序",选择你创建的文件夹。
  4. 点击浏览器工具栏的扩展图标,弹出页面后点击"禁用指定扩展"按钮即可。

关键说明

  • 必须使用Chrome扩展的原因是只有扩展才能申请management权限,调用Chrome的扩展管理API。
  • 采用背景脚本处理禁用逻辑是因为Chrome扩展的Service Worker(背景脚本)拥有更稳定的执行环境,适合处理异步API调用。
  • 用forEach遍历扩展ID数组,确保每个扩展都被处理,同时通过计数判断所有操作是否完成,避免提前弹出提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:05:36