Подмена ссылки через document.getElementById('hrefId').href
Есть ссылка, например:
https://expertnoemnenie.ru/
На ней висит onclick
, который при переходе, подменяет её через
document.getElementById('hrefId').href = 'https://panel.expertnoemnenie.ru/?ref=s6afe0q8rh11x6f89';
При обычном нажатии все работает, но возникает проблема, если пользователь использует правую кнопку мыши и нажимает 'Открыть ссылку в новой вкладке'. Тогда ссылка не подменяется. Можно это как-то исправить?
Ответы (1 шт):
Автор решения: Gelloiss
→ Ссылка
К сожалению, нет события "переход по ссылке", так что вручную придется модифицировать все события, которые могут привести к переходу по ссылке. Я всего три пока что вспомнил: клик, из контекстного меню, взять ссылку в фокус и нажать enter. Вот пример того, как вы можете обработать эти кейсы:
<!DOCTYPE html>
<html>
<head>
<title>Link Click Example</title>
</head>
<body>
<a href="https://example.com">Go to Example</a>
<a href="https://another-example.com">Go to Another Example</a>
<script>
// Функция для обработки переходов по ссылкам
function handleLinkNavigation(event, link) {
event.preventDefault(); // Предотвращаем переход по ссылке
// Выполняем необходимые действия
console.log('Link clicked! Performing actions before navigating...');
// После выполнения действий, перенаправляем пользователя
window.location.href = link.href;
}
// Обработчик для кликов по ссылкам
document.body.addEventListener('click', function(event) {
if (event.target.tagName === 'A' && event.target.href) {
handleLinkNavigation(event, event.target);
}
});
// Обработчик для кликов из контекстного менэ
document.body.addEventListener('contextmenu', function(event) {
if (event.target.tagName === 'A' && event.target.href) {
handleLinkNavigation(event, event.target);
}
});
// Обработчик для нажатий клавиш (Enter) по ссылкам в фокусе
document.body.addEventListener('keydown', function(event) {
if (event.key === 'Enter' && document.activeElement.tagName === 'A' && document.activeElement.href) {
handleLinkNavigation(event, document.activeElement);
}
});
// Обработчик для всех переходов с текущей страницы
window.addEventListener('beforeunload', function(event) {
// Выполняем необходимые действия перед уходом со страницы
console.log('Page is unloading. Performing actions before navigating...');
});
</script>
</body>
</html>