2014-10-20 12 views
14

In Chrome Devtools, è possibile interrompere javascript sulla modifica degli attributi di un elemento DOM o sulle modifiche di sottostruttura di un elemento.In un browser, interruzione di finestra Scroll

Sto lavorando su qualche codice legacy che ha qualche javascript che scorre in cima alla pagina in determinate situazioni, e voglio trovare il JS che fa questo.

C'è un modo, in Devtools, di interrompere gli eventi di scorrimento?

Potrebbe essere jQuery o Prototype.js o JS base eventi che lo fa, e ho cercato il codebase per .scrollTop o .animate, e ne ho trovati molti, ma nessuno che sta causando il mio problema .

+0

Hai cercato per window.scrollTo o window.scroll? –

+0

Sì, li ho cercati e loro si presentano, ma nessuno di loro è per la pagina che sto visitando. –

+0

Potrebbe essere possibile vederlo con un evento visivo http://www.sprymedia.co.uk/article/visual+event –

risposta

2

È possibile iniettare questa riga di JS utilizzando la console per attivare il debugger quando la posizione di scorrimento cambia in modo programmatico.

window.__defineSetter__("pageYOffset", function(){ 
    debugger; 
}); 

Quindi, visualizzare lo stack di chiamate per vedere cosa l'ha attivato.

Se non si desidera attivare il debugger, è possibile stampare l'istead traccia dello stack con il seguente codice:

window.__defineSetter__("pageYOffset", function(){ 
    console.log(new Error().stack); 
}); 

Un'altra opzione è quella di sostituire le finestre scroll, scrollTo e scrollBy metodo con il proprio .

window.__defineGetter__('scroll', function(){ 
    console.log('window.scroll getter :' + new Error().stack); 
    return function(x,y){ 
    debugger; //or print stack trace 
    oldScroll(x,y); 
    } 
}); 

Ripetere l'operazione per scrollTo e scrollBy.

+0

Ho scaricato la riga del debugger nella console e non è venuto fuori nulla quando ho fatto clic sul pulsante di scorrimento. –

+0

@Josh Hai provato a sostituire i metodi 'scroll',' scrollTo' e 'scrollBy'? –

+0

Provato a definire tutti i getter e non ho visto l'output nella console ... Utilizzo di Chrome (più recente). Quando invio la funzione def in console (ad esempio digita fn name e Invio) vedo la nuova fn def. Invocare 'scroll', ad esempio, genera 2 errori:' window.scorrere getter: Errore a : 3: 42 a : 1: 1 window.scroll getter: Errore a : 5: 44 a : 1: 1' – seebiscuit

4

Non ho alcuna idea di rottura effettiva rispetto a quelle presentate.

Ma ho il sospetto che non lo scorrimento causi il problema, ma un '#' nell'html.

<a href="#" onclick="return false;">x</a> 

è un modello molto comune. quando si dimentica (o qualcosa impedisce) il "ritorno falso", verrà spostato il # (punto di ancoraggio vuoto), che fa scorrere verso l'alto.

Controlla se l'url ha un # alla fine dopo aver fatto clic!