2016-08-21 100 views
12

我正在調試某個第三方縮小的Javascript,某處正在觸發瀏覽器頁面刷新。但是,我無法弄清楚哪部分代碼導致了刷新。頁面刷新前的斷點?

有沒有辦法在Chrome中放置一個斷點,在頁面刷新之前會觸發一個斷點,以便我可以檢查調用堆棧以查看造成它的原因?

+1

你可以嘗試一個自定義的'onunload'監聽器並在那裏打破。 – Marvin

+0

然後,您可以[生成堆棧跟蹤](http://stackoverflow.com/a/635852/558021)並查看哪些函數涉及觸發重新加載。 – Lix

+1

您可能已經知道這一點。 Chrome的控制檯中有一個複選框,在重新加載後,日誌不會清除。 –

回答

-2

導航到Chrome> Inspect Element> Source>選擇你的縮小的Javascript文件(不要點擊{}選項以獲得更好的理解,點擊下面的鏈接獲取截圖),然後放置斷點並處理剩下的部分。

CLICK FOR SCREENSHOT

+1

這對我的賞金理由沒有幫助,因爲我說我不是100%確定它在做什麼文件。這隻會在一個單獨的文件中創建一個斷點文件。 –

9

試試這個:

  1. 打開Chrome瀏覽器開發工具
  2. 導航到 「源」 選項卡
  3. 在右側面板中,展開 「事件監聽器斷點」
  4. 展開「加載」樹
  5. 檢查beforeunloadunload選項

看看是否有幫助;下面的截圖。

Chrome Dev Tools with Suggested Event Listener Breakpoints Checked

編輯:另外,如果不工作,你可以使用Chrome瀏覽器搜索所有加載腳本代碼,可能是負責任的。顯然有a lot of ways to refresh the page with JavaScript,但他們大多有一些常見的字符串,如「導航」,「位置」,「重新加載」,「窗口」。

最後,如果有在同一頁你的鏈接,有可能一些JS被觸發它 - 點擊可能性不大,但值得探討的問題,如果沒有別的迄今的工作...

(請原諒我在手機上的格式化...)

+0

它不會放棄導致刷新的代碼片段 – Siddharth

+0

對不起@Siddharth不知道我明白你在做什麼? –

+0

我的意思是OP想要檢測導致頁面刷新的代碼片段,你放這些事件的方式很好,但這種或那種方式我們無法知道觸發刷新的代碼的位置,希望你有更好的現在的想法 – Siddharth

2

您不指定第三方庫的功能。 如果它是像廣告之類的用戶友好組件,只需將其放置在iframe內,並根據需要配置​​屬性即可。 https://developer.mozilla.org/en/docs/Web/HTML/Element/iframe(向下滾動到沙箱屬性部分)

如果一些由事件觸發,只需使用(在Chrome瀏覽器開發工具只)的getEveneListener()函數,並按照listener蹤跡......(硬,但有可能) 例子:

enter image description here

監聽器屬性將導致你將要調用的實際功能。您可以在混淆的代碼中搜索它們並添加調試器來了解它的用途。

還有很多其他情況 - 如果您可以指定更多。

3

在devtool,網絡窗格中,切換「保留日誌」,仔細檢查啓動器列。

0

Firefox(不是Chrome,這很重要)開發者工具,去控制檯,輸入addEventListener('beforeunload',()=>{debugger}),並執行您的代碼。調試器在debugger語句處停止後,查看調用堆棧。你會看到觸發事件的是什麼。 Chrome並沒有在那裏。

至少,這對我有效。