Как я могу добавить текущие параметры url в href при нажатии ссылки на внешний сайт

#javascript #html #web #event-handling

#javascript #HTML #веб #обработка событий

Вопрос:

мы используем instapage в качестве инструмента для целевых страниц, и они удаляют параметры URL из ссылок, если пользователи нажимают на теги с внешними ссылками. Я хочу сохранить location.search.

Я пытался использовать этот скрипт здесь, но он вообще не работает — например, параметры по-прежнему удаляются, если они не указаны в ссылке href .

 window.addEventListener("click", function(e) {
    var href = e.target.getAttribute("href");
    if(href) {
        location.href = href   window.location.search;
        e.preventDefault();
    }
});​
 

Что-нибудь очевидное, чего мне здесь не хватает?

Комментарии:

1. Почему прослушиватель событий привязан к окну? Использование target может не делать то, что вы думаете. Попробуйте щелкнуть промежуток внутри ссылки, и я думаю, вы обнаружите target , что это промежуток

2. @evolutionxbox к чему еще он должен быть прикреплен? Прослушиватель должен присутствовать на всей странице. Скрипт также проверяет href элемента, на который нажат, и все ссылки на сайте являются тегами <a> .

3. Это не обязательно. Вместо этого вы можете прослушать щелчок по ссылкам. document.querySelectorAll('a').forEach(link => addEventListener('click', ...))

4. Я пробовал это (и некоторые другие решения, использующие это), но это не устраняет проблему.

5. Возможно, параметры удаляются при загрузке страницы? Почему бы не изменить HREF с помощью JavaScript?

Ответ №1:

Я решил проблему, просто изменив hrefs при загрузке страницы вместо того, чтобы пытаться добавить параметры onClick . Вот код, также учитывающий URL-адреса, в которых уже есть параметры.

 document.addEventListener("DOMContentLoaded", function(event) {
    document.querySelectorAll('[href^="http"]').forEach((element) => {
      var hrefString = element.getAttribute('href')
      if(hrefString.includes('?')) {
        element.setAttribute('href', hrefString   window.location.search.replace('?', 'amp;') )
      } else {
        element.setAttribute('href', hrefString   window.location.search)
      }
    })
});