Блокування банерів Google
У мене є пропозиція щодо використання Google-перекладача (звісно, якщо ви його використовуєте у CMS).
Після перекладу сторінки, коли ви наводите курсор миші на абзац, то він підсвічується, і з'являється спливаючий банер з пропозицією оцінити сервіс. Так от, наступна пропозиція полягає в тому, щоб його прибрати, як тільки Google-перекладач завершить свою роботу.
Знайшов лише два шляхи:
- Дочекатися завантаження ДОМ і спробувати його хакнути JS-скриптом.
- Додати стилі, які просто блокують цю всю історію.
Скажу відразу, що тільки зі скриптом і DOMом у мене нічого не вийшло, хоча покликаний на допомогу Copilot обіцяв, що це легко. А от стилі в голові сторінки - працюють на ура, хоча й теж не самостійно.
Приклад CSS на розгляд:
<style>
#goog-gt-tt,
.goog-tooltip.skiptranslate,
.activity-root,
.status-message,
.started-activity-container {
display: none !important;
visibility: hidden !important;
top: 0px !important;
}
.goog-te-banner-frame.skiptranslate {
display: none !important;
}
body {
top: 0px !important;
margin-top: 0 !important;
}
font {
background-color: transparent !important;
box-shadow: none !important;
}
.goog-text-highlight {
background-color: transparent !important;
border: none !important;
box-shadow: none !important;
}
</style>
Все добре, але залишається зверху пустота після фрейму з банером Google, хоча самого банера уже й не видно. Тому, тут уже діємо скриптом:
<script>
function removeBanner() {
const banner = document.querySelector('iframe[src*="translate.goog"]');
if (banner) {
banner.remove(); // Видалити iframe, якщо є
}
}
// Cлідкуємо за змінами в DOM і видаляємо iframe щоразу, як він з'являється
const observer = new MutationObserver(mutations => {
mutations.forEach(mutation => {
if (mutation.addedNodes.length) {
removeBanner();
}
});
});
observer.observe(document.body, { childList: true, subtree: true });
window.addEventListener('load', removeBanner); // Видалити банер при завантаженні сторінки
</script>
З плюсів - перезапуску DOM немає, але він відслідковується. Замість простого видалення iframe після завантаження сторінки, використовується MutationObserver. Він слідкує за змінами в DOM і видаляє iframe щоразу, коли той з'являється. Може, є ще способи, але я кращого не придумав.
Для порівняння можна переглянути оригінальна сторінка, і з урахуванням змін - виправлена версія.
Ну й на цьому все сьогодні.