Отключить аннотации Youtube с помощью JavaScript
В настоящее время я знаю три способа отключить аннотации в видео на YouTube:
- Вы можете использовать настройки YouTube. Это не будет работать для меня, так как я не имею (и не хочу) аккаунт.
- Вы можете использовать специализированное расширение. Это может сработать, но я бы предпочел не иметь полноценного расширения с кучей вариантов, просто для этого.
- Вы можете использовать (блокировку рекламы) и добавить
||youtube.com/annotations_
к его фильтрам. Это страдает от той же проблемы, что и предыдущий пункт. Кроме того, он полностью отключает их, а я просто хочу, чтобы они были отключены по умолчанию (поэтому у меня есть возможность включить их).
Можно ли сделать это с помощью JavaScript? У меня есть пользовательский сценарий, который уже выполняет некоторые изменения на сайте YouTube, поэтому в идеале я бы хотел его расширить. Это действительно последнее, что мне не хватает.
Я прошу, чтобы ответы ограничивались использованием JS, а не рекомендациями по расширению браузера. И потому, что (как уже упоминалось), я уже знаю о них, и потому что это касается как процесса обучения, так и результата. Это практика для большего количества пользовательских скриптов.
5 ответов
Поскольку youtube иногда меняет поведение игроков, я постараюсь поддерживать код в актуальном состоянии и максимально надежным.
var settings_button = document.querySelector(".ytp-settings-button");
settings_button.click(); settings_button.click(); // open and close settings, so annotations label is created
var all_labels = document.getElementsByClassName("ytp-menuitem-label");
for (var i = 0; i < all_labels.length; i++) {
if ((all_labels[i].innerHTML == "Annotations") && (all_labels[i].parentNode.getAttribute("aria-checked") == "true")) { // find the correct label and see if it is active
all_labels[i].click(); // and in that case, click it
}
}
Код пользователя правильный, нужно нажать на настройки и затем:
document.querySelectorAll("div[role='menuitemcheckbox']")[1].click()
Я добавил его в свой скрипт "Отключить автозапуск и аннотации": https://gist.github.com/Sytric/4700ee977f427e22c9b0
Ранее работавший JS:
document.querySelectorAll("div[aria-labelledby=\"ytp-menu-iv\"]")[0].click()
Я знаю, что вы не хотите использовать расширение для этого, но это самый гибкий и простой способ решения вашей проблемы. Расширение дает нам возможность использовать фоновый скрипт, с помощью которого мы можем внедрить css и javascript в открытую веб-страницу. Я сделал одно расширение для этого https://chrome.google.com/webstore/detail/hide-labels-and-end-cards/jinenhpepbpkepablpjjchejlabbpken этого также есть кнопка остановки и запуска, для которой я просто вставляю противоположный код, как и раньше. Если вам нужна дополнительная помощь по этому вопросу, я буду рад сделать это.
Вот хорошее решение, просто скрыть div с аннотациями
$("div.video-annotations").css("display", "none");