Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: kakashi20 en 6 Junio 2018, 15:26 pm



Título: Capturar evento click "Open Link in New Tab"
Publicado por: kakashi20 en 6 Junio 2018, 15:26 pm
Hola

Estoy tratando de ocultar links ( cloaking links ) de sitios afiliados.

El problema que tengo es que puedo capturar los click: izquierdo, derecho y medio, pero cuando hago click derecho y me aparece el menu y escojo "open in new tab" no puedo capturar ese evento pars poder mostrar la url con los parametros UTM

Codigo:

Código
  1. (function ($) {
  2.  
  3.    ninja_href(".ninja-href");
  4.  
  5. function ninja_href_call(e,which)
  6. {
  7.  
  8.  var ninja_url = e.target.getAttribute('data-ninja-url');
  9.  var ninja_target = e.target.getAttribute('data-ninja-target');
  10.  
  11.  if(ninja_target == null || typeof ninja_target == undefined || which === 3)
  12.  {
  13.    ninja_target = "_self";
  14.  }
  15.  
  16.  if(which === 2)
  17.  {
  18.    ninja_target = "_blank";
  19.  }
  20.  
  21.  
  22.  var win = window.open(ninja_url, ninja_target);
  23.  if (win && ninja_target == "_blank")
  24.  {
  25.    win.focus();
  26.  }
  27. }
  28.  
  29.  
  30.  
  31. function ninja_href(element)
  32. {
  33.  if(element == null || typeof element == undefined){
  34.    element = ".ninja-href";
  35.  }
  36.  
  37.  if (document.addEventListener)
  38.  {
  39.    document.addEventListener('click', function(e) {
  40.      if(e.target && e.target.matches(element))
  41.      {
  42.        if (e.which === 1 || e.which === 2)
  43.        {
  44.          e.preventDefault();
  45.          ninja_href_call(e,e.which);
  46.  
  47.        }
  48.      }
  49.    }, false);
  50.  
  51.    document.addEventListener('mousedown', function(e) {
  52.        if(e.target && e.target.matches(element))
  53.        {
  54.            if (e.which === 2)
  55.            {
  56.                e.preventDefault();
  57.                ninja_href_call(e,e.which);
  58.  
  59.            }
  60.        }
  61.  
  62.    }, false);
  63.  
  64.    document.addEventListener('contextmenu', function(e) {
  65.        console.warn(e);
  66.      if(e.target && e.target.matches(element))
  67.      {
  68.  
  69.      }
  70.    }, false);
  71.  } else {
  72.    document.attachEvent('click', function() {
  73.      if(e.target && e.target.matches(element))
  74.      {
  75.        if (e.which === 1 || e.which === 2)
  76.        {
  77.          e.preventDefault();
  78.          ninja_href_call(e,e.which);
  79.  
  80.        }
  81.      }
  82.    });
  83.  
  84.  }
  85.  
  86. }
  87.  
  88. }(window.jQuery));

Alguna idea

Gracias


Título: Re: Capturar evento click "Open Link in New Tab"
Publicado por: #!drvy en 6 Junio 2018, 15:32 pm
No puedes capturar esos eventos.. básicamente porque son eventos interiores del propio navegador y no los exponen.

En vez de complicarte tanto con "esconder" los links con javascript, implementa una funcionalidad server-side.

Saludos


Título: Re: Capturar evento click "Open Link in New Tab"
Publicado por: kakashi20 en 6 Junio 2018, 16:01 pm
Actualmente estoy implementando eso en  wordpress, pero no se muy bien como lo podria hacer de ese lado.

Porque con el script simplemente lo llamo asi:

Código
  1. <a target="_blank" class="ninja-href" data-ninja-url="<?php echo $full_link; ?>" data-ninja-target="_self" href="https://example.com/out"><?php echo $url; ?></a>

y hace el cloak a la url pero lo unico que no funciona es cuando se le da click derecho=>Open link in new tab


Título: Re: Capturar evento click "Open Link in New Tab"
Publicado por: [u]nsigned en 12 Junio 2018, 23:10 pm
podrias dar mas info, no logro comprender lo que queres hacer. Estás usando tu propio servidor o donde tenes tu wp? queres borras ads de algun plugin o algo asi? podrias ponernos mas en contexto.

PD: no podes capturar eso con js, lo que podes hacer es no usar links directos, sino guardarlos codificados en base64 por ejemplo en tu codigo js, y lugo capturas el evento click de cada link y ahi si capturas el evento click y por medio de una funcion decodificadas y abis tu link de la forma que quieras...