2014-10-20 33 views
14

在Chrome Devtools中,您可以在更改DOM元素的屬性或元素的子樹修改時打破JavaScript。在瀏覽器中,打開窗口滾動

我正在處理一些遺留代碼,它在某些情況下會將一些javascript滾動到頁面頂部,並且我想要查找執行此操作的JS。

Devtools有沒有辦法在滾動事件中解決?

它可能是jQuery或Prototype.js或事件庫JS,它已經搜索了.scrollTop或.animate的代碼庫,並且我發現了很多這些,但沒有一個導致我的問題。

+0

您是否搜索過window.scrollTo或window.scroll? – 2014-10-20 19:39:38

+0

是的,我已經搜索了這些,他們出現了,但他們都沒有爲我的網頁。 – 2014-10-20 19:39:59

+0

您可能可以通過視覺事件看到它http://www.sprymedia.co.uk/article/visual+event – 2014-10-20 19:40:40

回答

2

當滾動位置以編程方式更改時,可以使用控制檯注入此行以引發調試器。

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

然後,查看調用堆棧以查看觸發它的內容。

如果你不想激活調試器,你可以用下面的代碼打印堆棧跟蹤istead:

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

另一種選擇是用自己更換窗戶scrollscrollToscrollBy方法。

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

scrollToscrollBy重複。

+0

我在控制檯中放置了該調試器行,當點擊滾動按鈕時沒有任何東西出現。 – 2014-10-20 20:23:41

+0

@Josh你有嘗試替換'scroll','scrollTo'和'scrollBy'方法嗎? – 2014-10-20 20:30:03

+0

嘗試定義所有獲得者並且未在控制檯中看到輸出...使用Chrome(最新)。當我在控制檯輸出函數def(即輸入fn name和Enter)時,我確實看到了新的fn def。調用'scroll',例如,拋出2個錯誤:'窗口。在錯誤 :3:42 在:1:1個 window.scroll吸氣劑:錯誤 在:5:44 在:1:1' – seebiscuit 2016-12-28 03:51:06

4

我沒有關於實際突破的額外想法。

但我懷疑它不是滾動導致的問題,但在HTML中的'#'。

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

是一種非常常見的模式。當你忘記(或阻止)「返回false」時,#(空錨點)將被導航到,這導致滾動到頂部。

點擊後檢查網址是否有#末尾!