W jakich okolicznościach jest window.console.log
zdefiniowany w Internet Explorerze 9?
Nawet jeśli window.console.log
jest zdefiniowany window.console.log.apply
i nie window.console.log.call
jest zdefiniowany. Dlaczego to?
[Podobne pytanie do IE8: Co się stało z console.log w IE8? .]
javascript
logging
internet-explorer-9
mloughran
źródło
źródło
Odpowiedzi:
W Internet Explorerze 9 (i 8)
console
obiekt jest widoczny tylko wtedy, gdy narzędzia programistyczne są otwarte dla określonej karty. Jeśli ukryjesz okno narzędzi programisty dla tej karty,console
obiekt pozostanie widoczny dla każdej strony, do której nawigujesz. Jeśli otworzysz nową kartę, musisz także otworzyć narzędzia programistyczne dla tej karty, abyconsole
obiekt został ujawniony.console
Obiekt nie jest częścią żadnego standardu i jest rozszerzeniem Document Object Model. Podobnie jak inne obiekty DOM, jest uważany za obiekt hosta i nie wymaga się dziedziczeniaObject
ani metod odFunction
, podobnie jak rodzime funkcje ECMAScript i obiekty. To jest powódapply
icall
są niezdefiniowane dla tych metod. W IE 9 większość obiektów DOM została ulepszona w celu dziedziczenia z rodzimych typów ECMAScript. Ponieważ narzędzia programistyczne są uważane za rozszerzenie IE (aczkolwiek wbudowane rozszerzenie), najwyraźniej nie otrzymały takich samych ulepszeń jak reszta DOM.Za to, co jest warte, możesz nadal używać niektórych
Function.prototype
metod wconsole
metodach z odrobinąbind()
magii:źródło
console
obiektu Firebug .Prostym rozwiązaniem tego problemu w pliku console.log jest zdefiniowanie następujących elementów na początku kodu JS:
Działa to dla mnie we wszystkich przeglądarkach. Spowoduje to utworzenie fałszywej funkcji dla pliku console.log, gdy debugger nie jest aktywny. Gdy debugger jest aktywny, metoda console.log jest zdefiniowana i wykonuje się normalnie.
źródło
Wiem, że to bardzo stare pytanie, ale uważam, że stanowi to cenną alternatywę dla rozwiązania problemu z konsolą. Umieść poniższy kod przed każdym wywołaniem konsoli. * (Więc twój pierwszy skrypt).
Odniesienie:
https://github.com/h5bp/html5-boilerplate/blob/v5.0.0/dist/js/plugins.js
źródło
Plik console.log jest definiowany tylko wtedy, gdy konsola jest otwarta. Jeśli chcesz to sprawdzić w kodzie, upewnij się, że jest to zaznaczone we właściwości okna
powoduje to wyjątek w IE9 i nie będzie działał poprawnie. Nie rób tego
źródło
Po przeczytaniu artykułu z powyższego komentarza Marc Cliament zmieniłem teraz moją uniwersalną funkcję console.log w przeglądarce dla różnych przeglądarek:
źródło
Function.prototype.apply.call(console.log, console, arguments);
Chciałbym wspomnieć, że IE9 nie podnosi błędu, jeśli używasz console.log z narzędziami programistycznymi zamkniętymi we wszystkich wersjach systemu Windows. W XP tak, ale w Windows 7 nie. Jeśli więc zrezygnowałeś z obsługi WinXP w ogóle, możesz używać konsoli console.log bezpośrednio.
źródło
Co powiesz na...
źródło