2012-06-25 6 views
50

У меня есть страница, перенаправляющая, когда этого не должно быть, и я пытаюсь понять, кто это делает. Сначала я попробовал захватить окно. Location:Перерыв при изменении окна.

window.location = (function (location) { 
    // location is now hidden inside a closure. We can override it 
    var Location = Object.create(location); 
    // Location is now our proxy. We can use it to catch changes 
    window.__defineGetter__('location', function() { return Location }); 
    window.__defineSetter__('location', function (x) { debugger; location = x; return x; }); 
    // etc etc, considered assignments to location.href, location.search, location.host etc., as well as calls to location.replace and location.assign 
}(window.location)); 

Это совсем не работало в Chrome. Из соображений безопасности вы не можете делать сеттеры и геттеры на window.location. ОК. Следующая вещь, которую я пытался наблюдали OnUnload и onbeforeunload:

['unload', 'beforeunload'].forEach(function (evName) { 
    window.addEventListener(evName, function() { 
     debugger; // Chance to check everything right before the redirect occurs 
    }); 
}); 

Я знал, что стоимость window.location не будет оставаться неизменной до после события OnUnload, опять же из соображений безопасности, но я надеялся на какой-то другой ключ ; нет такой удачи. Затем я попытался установить точки останова в каждой точке, которую я могу найти в своих собственных сценариях, где возможно назначить window.location. Ни один из них не попадает в соответствии с отладчиком Chrome. Argh. Кстати, это перенаправление не происходит в FF, и я уже пробовал перезапустить Chrome. Я чувствую, что я действительно пробовал все и никуда не уходил, что, надеюсь, означает, что я собираюсь выступить в качестве разработчика? Пожалуйста?

Есть ли какой-либо способ в любом браузере для меня, человека, использующего отладчик, для разрыва строки, перенаправляющей местоположение страницы? Я понимаю, что есть последствия для безопасности для автоматического доступа к этой информации, но разве нет ничего привилегированного разработчика и позволяет сделать это? Если нет, каков нормальный способ борьбы с подобной ситуацией? Это кажется достаточно общим, и я не думаю, что кому-то нравится блокироваться в течение нескольких часов или дней по концептуально простой проблеме. TIA

+2

В худшем случае вы можете просто поставить точку останова где-то, а затем вручную выполнить код, пока не найдете нарушителя –

+1

Правда, и это то, что я сейчас делаю, но в качестве упражнения рассмотрим случай, когда перенаправление происходит из динамического include script tag: // Переадресация на google.com document.body.appendChild (document.createElement ('script')). appendChild (document.createTextNode (decodeURIComponent ( )% 77% 69% 6e% 64% 6f% 77% 2e% 6c% 6f% 63% 61% 74% 69% 6f% 6e% 2e% 61% 73% 73% 69% 67% 6e% 28% 27% 68 \ % 74% 74% 70% 3a% 2f% 2f% 77% 77% 77% 2e% 67% 6f% 6f% 67% 6c% 65% 2e% 63% 6f% 6d% 27% 29 '))) Вот почему мне интересно, есть ли трюк для резки гордиев узла, а если нет, то что делают профессионалы, чтобы свести к минимуму время, затрачиваемое на такие проблемы. –

+1

Любые обновления по этому вопросу? Я пытаюсь сделать то же самое. –

ответ

15

Вкладка «Сеть» позволяет вам включить флажок сохранения журнала, столбец инициатора будет содержать местоположение javascript, вызвавшее перенаправление.

+16

Это было бы полезно, если только в моем случае это просто говорит «Другое». Не очень полезно, Chrome. ': /' – qJake

+0

WOW! Я этого не знал. Благодаря :) –

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