2014-02-21 2 views
2

Мне нравится делать скрипты для пользователей. Это действительно весело, чтобы получить контроль над вашей любимой страницей или просто ускорить ее загрузку.Получите доступ к консоли после изменения ссылки на объект консоли

Curently, я столкнулся с проблемой, что страница либо определяет ссылку консольной новый фиктивный объект:

window.console = {log: function() {}, info: function() {} ... }; 

Или даже разрушает функцию:

window.console.log = function() {}; 
window.console.info = function() {}; 
... 

Я использую window, чтобы было очевидно, что я говорю о глобальной сфере. Кроме того, я не использовал быструю привязку к той же функции специально, во втором примере

Теперь, как бы вы справились с этим? Оповещения работают хорошо, но я привык к Firebug, и это консоль довольно много.
Невозможно выразить, насколько изящным я буду за любую помощь.

PNS .: В настоящее время данный сайт находится на League of Legends forums. Выполните следующий код, чтобы найти проблему.

window.console.log.toString(); //returns "function() {}" 

ответ

3

Ну, у меня есть одно неприятное решение. Создание IFRAME (который создает новое окно) и получить консольный объект этого фрейма:

function healConsole() { 
    //<iframe> element 
    var iframe = document.createElement("iframe"); 
    //Hide it somewhere 
    iframe.style.position="fixed"; 
    iframe.style.height = iframe.style.width = "1px"; 
    iframe.style.top = iframe.style.left = "-5px"; 
    //No src to prevent loading some data 
    iframe.src = "about: blank"; 
    //Needs append to work 
    document.body.appendChild(iframe); 
    //Get the inner console 
    window.console = iframe.contentWindow.console; 
} 

Не знаю, как кросс-браузер это, хотя. Я ищу что-то лучшее ...

+2

Это, вероятно, как кросс-браузер, как вы можете получить. С помощью Chrome devtools вы также можете использовать консоль удаления hack 'delete; delete console.log' ('log' живет на прототипе, а' console' - магия), а с Firefox devtools hack 'delete console' (' console' еще более волшебный). Однако консоль Firebug не волшебна, поэтому вы не можете добраться до нее без нового глобального объекта. (Если, конечно, вы не можете получить доступ к 'console', прежде чем он будет перезаписан.) –

+0

Спасибо за эти другие варианты, я попробую их сейчас. Мне не нравится идея создания элемента (и условно iframe) только из-за этого. –

+0

Вы также можете захотеть следовать [issue 5995] (http://code.google.com/p/fbug/issues/detail?id=5995) (Дайте подсказку, когда API-интерфейс Console не может быть введен) и [проблема 6268] (http://code.google.com/p/fbug/issues/detail?id=6268) (Выведите чистый объект «консоль» в Командную строку). –

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