簡體   English   中英

如何檢測 JavaScript 警報來自何處?

[英]How to detect where JavaScript alert is coming from?

我正在嘗試調試一個非常復雜的 IE Intr.net 應用程序。 我收到一條帶有自定義消息的警報,指出發生了異常。 我想了解有關此異常的更多信息,因為該消息不是很有幫助。

有一個包含大量 iFrame 的母版頁(如果有區別的話還有 .htc 文件)所以我不認為我可以嘗試劫持 window.alert 我最后的選擇是通過文件搜索試試運氣。

使用 IE 8,我是否可以檢測到此警報的來源? 理想的解決方案是以某種方式創建一個“breakOnAlert”function,它在正確的警報位置插入調試器語句。

澄清一下:母版頁包含許多 iframe,我相信錯誤+警報來自其中之一。 每個 iframe 都是一個 aspx 頁面(有時來自用戶的動態 html/javascript)並包含內聯和外部 JavaScript。在發布之前,我確實嘗試覆蓋我的頁面(iframe 內的子頁面)中的警報,但它沒有用。 我假設 它不起作用,因為每個 iframe 都有自己的 window object 所以他們每個人都有自己的警報版本。 為此,我需要找到所有 iframe 並為每個 iframe 覆蓋它,我認為這樣做會非常復雜。 在 IE 開發人員工具中,我可以看到大量腳本文件(內聯和外部),因此很難手動在其中查找警報。

由於在所有 iframe 中執行此操作確實很麻煩,因此我可能會使用Fiddler並以編程方式將alert(替換為類似以下內容:

(function(n){alert(n);debugger;})(

IE 應該支持debugger語句,所以你會有一個調用堆棧

本頁解釋了如何在 Fiddler 中進行文本替換

要添加到OnBeforeResponse的示例 Fiddler 自定義規則:

if (oSession.oResponse.headers.ExistsAndContains("Content-Type", "html"))
{
    oSession.utilDecodeResponse();
    var oBody = System.Text.Encoding.UTF8.GetString(oSession.responseBodyBytes);
    oBody = oBody.replace(/alert\(/gi, "(function(n){alert(n);debugger;})(");
    oSession.utilSetResponseBody(oBody);
}

Ovveride alert function 並在里面設置一個斷點,然后你可以看到 Stack Trace :)

 function alert(message) {
     var x = 'whatever';
 }


 $(function () {
     alert('test');
 });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM