Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

76
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!