使用 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);
我正在开发一个 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);