[英]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.