2012-04-09 2 views
8

Я пытаюсь отлаживать очень сложное приложение Интранет IE. Я получаю предупреждение с настраиваемым сообщением о том, что произошло исключение. Я хотел бы узнать больше информации об этом исключении, поскольку сообщение не очень полезно.Как определить, откуда поступает JavaScript?

Существует основная страница, которая содержит много iFrames (и .htc-файлов, если это имеет значение), поэтому я не думаю, что могу попробовать и hijack window.alert. Моим последним прибежищем будет попытка удачи в поиске файлов.

Используя IE 8, есть ли в любом случае я могу определить, откуда это предупреждение? Идеальным решением было бы как-то создать функцию breakOnAlert, которая вставляет инструкцию debbuger в правильное место оповещения.

Чтобы уточнить: Основная страница содержит много фреймов, и я считаю, что сообщение об ошибке + появляется из одного из них. Каждый iframe является страницей aspx (иногда с динамическим html/javascript от пользователя) и содержит встроенный и внешний JavaScript. Перед публикацией я попытался переопределить предупреждение на моей странице (дочерняя страница внутри iframe), но это не сработало. Я предполагаю, что Это не работает, так как каждый iframe имеет свой собственный объект окна, поэтому у каждого из них есть своя версия alert. Для этого мне нужно было бы найти все iframes и переопределить их для каждого из них, что, по-моему, было бы очень сложно сделать. В инструментах разработчика IE я вижу огромное количество файлов сценариев (inline и external), поэтому было бы очень сложно вручную искать предупреждения там.

+0

теме, но, пожалуйста, отправьте код thedailywtf.com –

ответ

5

Поскольку это реальная хозяйственная работа, чтобы сделать это во всех фреймов, я бы, вероятно, использовать Fiddler и заменить alert( программно что-то вроде:

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

IE должен поддерживать debugger заявления, так что вам придется автодозвон стека

This page объясняет, как сделать текст замены в Скрипач

Пример Скрипач пользовательские правила, чтобы добавить к OnBeforeResponse:

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); 
} 
+0

Отличное решение. Я обновил ваш ответ (ожидая утверждения) с помощью правильного правила Fiddler. Благодарю. – row1

1

Ovveride функция предупреждения и установить контрольную точку внутри, то вы можете наблюдать Трассировка стека :)

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


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

Привет, как упомянуто я не Думаю, что это будет работать из-за всех iFrames. Я попытался, прежде чем публиковать вопрос, но я предполагаю, что он не работает, потому что каждый кадр будет иметь свой собственный window.alert() Мне нужно было бы переопределить их все. – row1

+0

Тогда спасибо за эту информацию :) Я этого не знал. –

Смежные вопросы