大概写了一下,核心要点是两个
1. 无重复无遗漏的捕获所有节点;
2. 阻止官方脚本的事件委托回调;
// ==UserScript==
// @
name Open link in new tab for YouTube
// @
match *://
www.youtube.com/*// @
run-at document-start
// ==/UserScript==
addEventListener('DOMContentLoaded', ({ target }) => {
new MutationObserver( records => {
records.forEach( record => {
record.addedNodes.forEach( target => {
callback(target);
} );
} );
} ).observe( document , {
childList: true ,
subtree: true ,
} );
callback(target);
} );
function callback(target)
{
target.querySelectorAll?.('a').forEach( link => {
link.addEventListener('click', event => {
link.target = '_blank';
event.stopImmediatePropagation();
} );
} );
}