Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

77
Vistas
No se puede capturar el evento de clic en la barra de búsqueda de Netflix

Tengo una extensión de Chrome que se basa en la detección de eventos de clic en la barra de búsqueda de Netflix. El div ([data-uia=timeline-bar]) se agrega dinámicamente a dom una vez que el usuario pasa el mouse sobre el reproductor de video, así que traté de usar el burbujeo de eventos para escuchar el evento.

 //after injecting jquery on page $('body').on('click','[data-uia=timeline-bar]',function(e){ console.log('click detected'); })

No funcionó, así que traté de agregar un oyente en la fase de captura. Se detectan todos los eventos de clic, excepto el clic de la barra de búsqueda.

 document.addEventListener('click', (e) => {console.log('click detected during capture phase')} ,true);

¿Hay alguna forma de escuchar el evento de clic en ([data-uia=timeline-bar])?

Captura de pantalla de Netflix

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

¿Agregar un MutationObserver al elemento principal del elemento [data-uia=timeline-bar] que observa cuando sus hijos cambian, por ejemplo, se agrega la barra de línea de tiempo? y en la devolución de llamada, adjunta un oyente una vez que se agrega el elemento de barra de línea de tiempo?

 // The timeline-bar's parent's data-uia is "timeline" in the Netflix player DOM. let parent = document.querySelector("[data-uia=timeline]"), options = { childList: true }, observer = new MutationObserver(mCallback); observer.observe(parent, options); function mCallback (mutations) { for (let mutation of mutations) { if (mutation.type === 'childList') { for(let node of mutation.addedNodes){ if(node.getAttribute("data-uia") === "timeline-bar"){ node.addEventListener('click', () => { alert("clicked"); // Do click stuff... }); } } } } } // To test the observer btnAttr.addEventListener('click', function () { let el = document.createElement("div"); el.setAttribute("data-uia", "timeline-bar"); el.innerText = "A TIMELINE-BAR"; parent.appendChild(el); }, false);

codepen aquí: https://codepen.io/freedruk/pen/powaKBy

about 4 years ago · Juan Pablo Isaza Denunciar

0

De hecho, su objetivo necesita trabajo duro, ya que los elementos dom se crean y eliminan de forma permanente. El único enfoque que puedo proponer ciertamente puede considerarse sucio, pero al menos puedes intentarlo;)

 $("[data-uia='player']").on("DOMSubtreeModified", function(){ const ref = "div[data-uia='timeline-knob']"; if($(ref)){ $(ref).off("mouseover").on("mouseover", function(event){ const that = $(this); const previousSibling = event.target.previousSibling; if(previousSibling.style.left){ console.log("Click presumed"); } else { console.log("released"); } }); }; });

El truco consiste en observar el objeto de la perilla de la línea de tiempo y analizar la situación en el div hermano anterior, porque se producen algunos repintados cuando el mouse está sobre la línea de tiempo.

Es solo una solución, espero que esto pueda ayudarte :) ¡Que tengas un buen día!

[EDITAR 1]

Una forma más elegante:

 const ref = "div[data-uia='timeline'].active"; const onclick = (e) => { console.log("clicked on", e); }; const prepare = (obj, e) => { $(e.target).css("pointer-events","auto").css("border", "0.1px solid rgba(255,255,255,0)"); $(obj).off("click.test").on("click.test", (clickevent) => {onclick(clickevent.target);}); }; $("[data-uia='player']").on("DOMSubtreeModified", function(modevent){ $(ref).each(() => { prepare(ref,modevent); }); });

Tuve que enfrentar varias dificultades:

  1. incluso el nodo "línea de tiempo" se regenera, por lo que debemos adjuntarle el evento "clic" en cada modificación del "jugador"
  2. básicamente, a menudo tenemos que hacer clic en divs vacíos (por ejemplo, exactamente en la línea de tiempo), y luego no se activa ningún evento de "clic", por lo que le aplicamos un diseño casi invisible para obligar al navegador a considerarlo como un nodo en el que se puede hacer clic.
  3. y no menos importante: Netflix usa la propiedad css "pointer-events" para bloquear algunos eventos de "clic", por lo que tenemos que arreglarlo de nuevo en "auto"

Probé este código varias veces y parece funcionar bien ;)

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda