禁用带有JavaScript的YouTube链接?

时间:2017-11-17 17:35:42

标签: javascript youtube tampermonkey

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

通常工作的例子:

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

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

1 个答案:

答案 0 :(得分:1)

您最好的选择可能是使用window添加全局(即在useCapture对象上)事件监听器,然后使用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);