使用 JavaScript 禁用 YouTube 链接?

Disable YouTube links with JavaScript?

我正在开发一个 tampermonkey 脚本,让您只需单击文本即可在 YouTube 上编辑文本。我还想编辑 YouTube 上推荐的视频,但为此,我需要暂时禁用这些链接。 linkElement.onclick = function(e){return false;}; 适用于大多数链接,但出于某种原因,它不适用于 YouTube 链接。有人知道为什么这不起作用吗?

它通常工作的例子:

<a id='testlink' href='http://whosebug.com'>Test link</a>
<br />
<button onclick='document.getElementById("testlink").onclick=function(e){return false;};'>Disable link</button>

就像我说的,这在 YouTube 上不起作用,而且我不知道他们的链接使用什么代码。我认为这与它似乎总是一个无缝的页面有关。

您最好的选择可能是使用 useCapture 添加全局(即在 window 对象上)事件侦听器,然后使用 event.stopImmediatePropagation().

例如,要阻止对锚元素的所有点击:

window.addEventListener('click', function(event) {
  var currentEl = event.target;
  while (currentEl && currentEl.tagName !== 'A') currentEl = currentEl.parentNode; 
  if (!currentEl) return;
  event.preventDefault();
  event.stopImmediatePropagation();
}, true); // true is for `useCapture`

但这还不够,因为 youtube 有自己的加载方法,无需实际刷新页面或点击实际锚点即可切换页面。

因此,您可以概括此方法以防止 click 几乎所有元素的事件处理,但您正在控制的元素除外:

function isAllowed(el) {
  // custom logic. e.g. block everything
  return false;
}

window.addEventListener('click', function(event) {
  if (isAllowed(event.target)) return;
  event.preventDefault();
  event.stopImmediatePropagation();
}, true);