在页面上执行的具有绝对路径的所有点击前添加 URL

Prepend URL to all clicks with absolute paths executed on a page

我遇到了广告代理商投放没有点击跟踪参数的广告的问题 URLs。

在我的示例中,点击 URL 将是: http://landing-page.com

我的跟踪 URL 将是: http://tracker.com?url=

期望的效果是,当用户点击广告素材上的任何 link 时,他将被发送到:

http://tracker.com?url=http://landing-page.com

问题是,link 是使用 <a> 标签或 click eventListener 定义的。使用 onclickaddEventListener('click', func))

我可以遍历所有 a[href^=http]

如何 catch/prepend 我的 URL 到事件侦听器?

非常感谢

编辑:

所以对于 hrefs 我正在做这样的事情:

<script>
  var links = adContainer.querySelectorAll('a[href^=http]');
  window.adclick = 'http://tracker.com?url='
  for (var i = 0; i < links.length; i++) {
    (function(i) {
      links[i].addEventListener('click', function(e) {
        window.open(window.adclick + links[i].href, '_blank');
        e.preventDefault();
      });
    })(i);
  }
</script>

我遇到的问题是,我无法解决问题,也无法在线查找如何使用事件侦听器执行类似操作。

经过更多尝试,我找到了一个非常简单的解决方案。

我仍然应该检查 URL 是否以 http 开头 - 但你明白了要点:

window._open = window.open;

window.open = function(url, target) {
  window._open('http://tracker.com?url=' + url, target);
}

干脆试试改:

    window.open(window.adclick + links[i].href, '_blank');

    window.open(window.adclick + this.href, '_blank');

所以试试这个:

<script>
  var links = adContainer.querySelectorAll('a[href^=http]');
  window.adclick = 'http://tracker.com?url='
  for (var i = 0; i < links.length; i++) {
      links[i].addEventListener('click', function(e) {
        window.open(window.adclick + this.href, '_blank');
        e.preventDefault();
      });
  }
</script>