wwwwwllllk 发表于 2023-4-23 19:11:45

youtubu点击视频不跳转新标签页

本帖最后由 wwwwwllllk 于 2023-4-23 22:17 编辑

# 脚本基本可以满足使用,但是遗憾的就是视频点击不跳新标签页问题还没有解决
!(data/attachment/forum/202304/23/221729ikpkgrf171orfolh.png)
# 猜测
1.应该就是点击视频位置可能本身的事件比我先执行,但是我已经在body监听阻止事件了,但是好像不起作用,不知道为什么。
希望哥哥们可以提供思路。

```javascript
// ==UserScript==
// @name         YouTuBu click text link open new tab
// @namespace    https://bbs.tampermonkey.net.cn/
// @version      0.1.0
// @descriptiontry to take over the world!
// @author       xiaofeiwu
// @match      https://www.youtube.com/
// @run-at       document-end
// @grant      GM_addStyle
//
// ==/UserScript==

(function () {
    'use strict';

    setTimeout(() => {
      // document.body.addEventListener('click', (event) => {
      //   event.stopPropagation();
      //   event.preventDefault();
      // })
      setInterval(() =>{
            const textHrefList = document.querySelectorAll('#video-title-link')
            for (let i = 0; i < textHrefList.length; i++) {
                textHrefList.style.backgroundColor = 'skyblue'
            }
            const links = document.querySelectorAll('a');
            for (let i = 0; i < links.length; i++) {
                links.addEventListener('click', (event) => {
                  event.stopPropagation(); // 阻止事件冒泡
                  event.preventDefault(); // 阻止链接的跳转行为
                  window.open(links.href, '_blank'); // 在新标签页中打开链接
                });
            }
      }, 5*1000)
    }, 3000)
})();

```

cxxjackie 发表于 2023-4-23 19:11:46

没太理解你的问题,阻止点击不是已经实现了吗?你说的点视频是指图片吗?那个是img,你阻止的是a标签的,就是文字部分,再加上img就行了吧。
body层面拦截事件要把addEventListener的第三个参数设置为true,因为事件是先从外到内捕获,再从内到外冒泡(body捕获→目标捕获→目标冒泡→body冒泡),事件冒泡到body的时候目标元素已经触发完了,此时阻止没有意义。设置为true在body捕获时阻止,即可阻断事件传播到目标元素。参考:https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget/addEventListener
滚动刷新用MutationObserver,不会写也可以试试ElementGetter库。
另外阻止事件传播最好用stopImmediatePropagation,跟stopPropagation是有区别的,参考:https://developer.mozilla.org/zh-CN/docs/Web/API/Event/stopImmediatePropagation

steven026 发表于 2023-4-23 21:49:27

<a>标签习惯用鼠标中键后台打开新标签页,完全没这个烦恼……

wwwwwllllk 发表于 2023-4-23 22:20:10

本帖最后由 wwwwwllllk 于 2023-4-23 22:21 编辑

cxxjackie 发表于 2023-4-23 21:11
没太理解你的问题,阻止点击不是已经实现了吗?你说的点视频是指图片吗?那个是img,你阻止的是a标签的,就 ...
https://bbs.tampermonkey.net.cn/ ... kpkgrf171orfolh.png

感谢大佬解答,我现在是实现了文字点击新标签页了,其实上面的视频点击刚才又测试了一下,应该就是父级标签的事件先触发进行捕获拦截导致的。这种情况我现在想的只有移除父标签的事件,不知道还有没有其它思路。不过对于我自用其实够了,比较好奇,下次写类似的脚本可以写的更好一点

cxxjackie 发表于 2023-4-23 23:01:56

我测试了一下,点视频图片可以新标签打开啊,唯一有问题的是短视频那里,链接是/shorts开头所以没匹配到,不知道你说的是不是这个?还有你只match了主页,打开别的以后再点击就无效了,应该不会是这种问题吧。
ElementGetter的each方法就是专门处理此类需求的,还是建议你试试:
elmGetter.each('a, a', el => {
    el.addEventListener('click', e => {
      e.preventDefault();
      e.stopImmediatePropagation();
      window.open(el.href, '_blank');
    });
});

wwwwwllllk 发表于 2023-4-24 14:05:47

cxxjackie 发表于 2023-4-23 23:01
我测试了一下,点视频图片可以新标签打开啊,唯一有问题的是短视频那里,链接是/shorts开头所以没匹配到, ...

难道是别的脚本和插件影响到了?

笑熬浆糊4 发表于 2024-6-16 17:43:29

https://greasyfork.org/zh-CN/scripts/476514-youtube-pc-%E6%96%B0%E6%A0%87%E7%AD%BE%E9%A1%B5%E6%89%93%E5%BC%80
这个脚本可以。
页: [1]
查看完整版本: youtubu点击视频不跳转新标签页