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

如何将点击EventListener设置的链接目标从_blank改为_self?

解决方法:将动态处理的链接改为当前标签页打开

针对你遇到的场景(网站通过点击事件监听、利用<a>元素的id属性跳转新标签,且无href/target属性),可以通过以下方式实现需求:

方法一:拦截点击事件并自定义跳转(推荐)

通过在捕获阶段绑定全局点击事件,优先于原网站的事件监听器执行,阻止默认行为后自行在当前标签页跳转。

// ==UserScript==
// @name         强制链接在当前标签页打开
// @namespace    your-namespace
// @version      0.1
// @description  改写网站动态链接的跳转方式为当前标签页
// @match        https://目标网站域名/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    document.addEventListener('click', function(e) {
        // 找到被点击的<a>元素(包括嵌套元素触发的点击)
        const linkElement = e.target.closest('a');
        if (linkElement && linkElement.id) {
            // 核心:替换成原网站通过id获取URL的逻辑
            const targetUrl = getTargetUrlById(linkElement.id);
            
            if (targetUrl) {
                e.preventDefault(); // 阻止原事件的默认行为
                e.stopPropagation(); // 阻止事件传递给原监听器
                window.location.href = targetUrl; // 当前标签页跳转
            }
        }
    }, true); // 捕获阶段触发,确保先于原网站的冒泡监听器执行

    // 需根据网站实际逻辑修改此函数
    function getTargetUrlById(elementId) {
        // 示例1:id直接拼接URL
        // return `https://目标网站.com/detail/${elementId}`;
        // 示例2:从网站全局映射对象获取
        // return window.siteLinkMap[elementId];
        // 你需要通过浏览器开发者工具分析原网站的JS代码,找到它生成URL的规则
        return null;
    }
})();

关键说明:

  • 必须先通过浏览器开发者工具(F12)分析原网站的点击事件处理逻辑,找到它如何利用<a>的id生成跳转URL,然后替换getTargetUrlById函数里的实现。
  • 捕获阶段绑定事件(第三个参数true)是核心,能确保我们的代码先于原网站的事件监听器执行,从而拦截原跳转行为。

方法二:覆盖原事件监听器(不推荐)

如果原网站的事件监听器是可访问的(比如绑定在全局对象上),可以尝试覆盖它,但这种方式兼容性差且不稳定:

  • 可以通过getEventListeners(浏览器调试API)查看元素上的绑定事件,但该API未标准化,userscript中可能无法正常使用。
  • 若原监听器是匿名函数,几乎无法直接移除或覆盖,因此不推荐此方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:15:35