Подмена ссылки через 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>

→ Ссылка