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

如何用用户脚本点击特定链接时打开修改后URL且不触发原请求

需求可行性与实现方案

这个需求完全可行,核心思路是拦截链接的点击事件,在浏览器触发默认跳转行为之前终止它,然后手动打开修改后的URL,完全不需要修改DOM或依赖@run-at document-start的加载时机。

关键实现步骤

  • 监听点击事件:给目标页面的document或特定父容器绑定click事件,设置事件捕获阶段触发(用addEventListener的第三个参数true),这样能比默认的冒泡更早拿到事件,确保拦截优先级。
  • 识别目标链接:在事件回调里判断点击的元素是不是目标链接——可以通过元素的tagName(必须是A)、文本内容、原href特征等条件筛选,注意要通过event.target向上遍历找到真正的<a>标签(比如点击了链接里的子元素)。
  • 阻止默认行为与冒泡:确认是目标链接后,调用event.preventDefault()阻止浏览器跳转原URL,再调用event.stopPropagation()避免其他脚本干扰。
  • 打开修改后的URL:根据原URL生成修改后的地址,用window.open()(新窗口)或window.location.href = 新地址(当前窗口)实现跳转,完全不会触发原URL的请求。

示例代码

// ==UserScript==
// @name         链接重定向拦截
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  拦截特定链接点击,跳转修改后的URL
// @match        https://example.com/*  // 替换成你的目标页面
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // 监听document的点击事件,捕获阶段触发
    document.addEventListener('click', function(event) {
        // 找到点击路径中的<a>标签
        let targetLink = event.target.closest('a');
        if (!targetLink) return;

        // 判断是否是目标链接:这里示例用href包含特定关键词,可替换成其他条件
        const originalHref = targetLink.href;
        if (!originalHref.includes('target-path')) return;

        // 阻止默认跳转行为
        event.preventDefault();
        event.stopPropagation();

        // 生成修改后的URL
        const modifiedHref = originalHref.replace('old-part', 'new-part');

        // 跳转:当前窗口打开用下面一行,新窗口用window.open(modifiedHref)
        window.location.href = modifiedHref;
    }, true); // 第三个参数true表示捕获阶段监听
})();

为什么不需要@run-at document-start

因为事件监听是绑定在document上的,只要脚本在页面加载完成前(比如默认的@run-at document-end)执行,就能完成监听绑定,后续所有点击事件都会被捕获。哪怕页面动态加载新的链接,这种监听方式也能生效(因为是委托在document上,不需要给每个链接单独绑定)。

隐秘性保障

  • 全程没有修改任何DOM元素的href属性,页面源码和元素检查里看到的还是原链接;
  • 调用preventDefault()直接阻止了浏览器的默认跳转,不会向原URL发送任何请求,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:50:20