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

能否开发浏览器扩展以阻止下载及网站新标签页打开链接?

浏览器扩展开发方案:阻止下载与新标签页跳转

1. 阻止浏览器内所有下载操作

完全可以开发这类扩展,核心是利用浏览器扩展的下载拦截API实现。以Chrome为例,通过监听下载前的事件并取消操作即可达成目标。

实现步骤:

  • 配置manifest.json:需申请downloads权限,指定后台脚本:
{
  "manifest_version": 3,
  "name": "下载拦截器",
  "version": "1.0",
  "permissions": ["downloads"],
  "background": {
    "service_worker": "background.js"
  }
}
  • 编写后台脚本background.js:监听chrome.downloads.onBeforeDownload事件,调用cancel()阻止下载:
chrome.downloads.onBeforeDownload.addListener((downloadItem, suggest) => {
  // 直接取消所有下载请求
  suggest({ cancel: true });
  // 可选:弹窗提示用户下载已被阻止
  chrome.notifications.create({
    type: 'basic',
    iconUrl: 'icon.png',
    title: '下载已阻止',
    message: '为防范风险,所有下载操作已被拦截'
  });
});

该方案会拦截所有触发浏览器下载流程的操作,包括直接点击下载链接、页面自动触发的下载请求。

2. 阻止网站在新标签页打开链接

可以开发这类扩展,有两种主流实现思路,分别适用于不同场景:

方案一:通过内容脚本修改页面链接行为

直接在页面注入脚本,修改所有target="_blank"的链接属性,或阻止window.open调用:

// content-script.js
document.addEventListener('click', (e) => {
  const link = e.target.closest('a');
  if (link && link.target === '_blank') {
    e.preventDefault();
    // 可选:在当前标签页打开链接,或者直接阻止跳转
    window.location.href = link.href;
  }
});

// 拦截window.open调用
const originalOpen = window.open;
window.open = function(url, target) {
  if (target === '_blank') {
    // 阻止新标签页打开,改为当前页跳转或直接忽略
    window.location.href = url;
    return null;
  }
  return originalOpen.apply(this, arguments);
};

需在manifest.json中配置内容脚本的匹配规则:

{
  "content_scripts": [
    {
      "matches": ["<all_urls>"],
      "js": ["content-script.js"],
      "run_at": "document_start"
    }
  ]
}

方案二:通过后台脚本拦截导航请求

利用webRequestAPI拦截新标签页的导航请求:

// background.js
chrome.webRequest.onBeforeRequest.addListener(
  (details) => {
    // 判断是否为新标签页打开的请求
    if (details.frameId === 0 && details.parentFrameId === -1 && details.initiator) {
      // 取消请求,或重定向到当前标签页
      return { cancel: true };
      // 若要改为当前页打开,可使用:
      // chrome.tabs.update({ url: details.url });
      // return { cancel: true };
    }
  },
  { urls: ["<all_urls>"] },
  ["blocking"]
);

此方案需在manifest.json中申请webRequest和webRequestBlocking权限:

{
  "permissions": ["webRequest", "webRequestBlocking", "tabs"]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 21:07:02