Według tego postu była w fazie beta, ale nie ma jej w wydaniu?
javascript
logging
internet-explorer-8
console
leeand00
źródło
źródło
console.log
Jest tam w IE8, aleconsole
obiekt nie jest tworzony dopóki nie otworzysz DevTools. Dlatego wywołanie doconsole.log
może spowodować błąd, na przykład, jeśli wystąpi on podczas ładowania strony, zanim będzie można otworzyć narzędzia programistyczne. Wygranej tutaj odpowiedź wyjaśnia to w sposób bardziej szczegółowy.Odpowiedzi:
Jeszcze lepszym rozwiązaniem w przypadku awarii jest:
źródło
Plik console.log jest dostępny tylko po otwarciu Narzędzi programisty (klawisz F12, aby przełączyć go w tryb otwierania i zamykania). Zabawne jest to, że po otwarciu możesz go zamknąć, a następnie opublikować na nim za pośrednictwem połączeń na konsoli.log, a będą one widoczne po ponownym otwarciu. Myślę, że to rodzaj błędu i może zostać naprawiony, ale zobaczymy.
Prawdopodobnie użyję czegoś takiego:
a jeszcze prostsze:
źródło
alert
jest zły. Niektóre kody zachowują się inaczej, gdy używane są alerty, ponieważ dokument traci ostrość, co jeszcze bardziej utrudnia zdiagnozowanie błędów lub tworzenie błędów tam, gdzie ich wcześniej nie było. Ponadto, jeśli przypadkowo pozostawisz aconsole.log
w kodzie produkcyjnym, jest on łagodny (zakładając, że nie wybuchnie) - po prostu cicho loguje się do konsoli. Jeśli przypadkowo pozostawiszalert
w kodzie produkcyjnym, środowisko użytkownika jest zrujnowane.To jest moje zdanie na temat różnych odpowiedzi. Chciałem zobaczyć zarejestrowane wiadomości, nawet jeśli nie miałem otwartej konsoli IE podczas ich uruchamiania, więc wpycham je do
console.messages
tablicy, którą tworzę. Dodałem również funkcjęconsole.dump()
ułatwiającą przeglądanie całego dziennika.console.clear()
opróżni kolejkę komunikatów.To rozwiązanie „obsługuje” także inne metody konsoli (które, jak sądzę, wszystkie pochodzą z interfejsu API konsoli Firebug )
Wreszcie, to rozwiązanie ma postać IIFE , więc nie zanieczyszcza globalnego zasięgu. Argument funkcji rezerwowej jest zdefiniowany na dole kodu.
Po prostu upuszczam go w moim głównym pliku JS, który znajduje się na każdej stronie, i zapominam o nim.
Kilka dodatkowych informacji
Linia
var args = Array.prototype.slice.call(arguments);
tworzy tablicę zarguments
obiektu. Jest to wymagane, ponieważ argumenty tak naprawdę nie są tablicą .trap()
jest domyślnym modułem obsługi dowolnej funkcji API. Przekazuję argumenty, abymessage
uzyskać dziennik argumentów, które zostały przekazane do dowolnego wywołania API (nie tylkoconsole.log
).Edytować
Dodałem dodatkową tablicę,
console.raw
która przechwytuje argumenty dokładnie tak, jak przekazanotrap()
. Uświadomiłem sobie, żeargs.join(' ')
konwertuje obiekty na ciąg,"[object Object]"
co może być czasem niepożądane. Dzięki bfontaine za sugestię .źródło
trap
funkcjivar args = Array.prototype.slice.call(arguments); var message = args.join(' ');
:? Dlaczego przekazujesz te argumenty do wiadomości?Warto zauważyć, że
console.log
w IE8 nie jest prawdziwą funkcją Javascript. Nie obsługuje metodapply
lubcall
.źródło
console.log=Function.prototype.bind.call(console.log,console);
do obejścia tego.bind
.Zakładając, że nie przejmujesz się awarią polegającą na ostrzeżeniu, oto jeszcze bardziej zwięzły sposób obejścia wad programu Internet Explorer:
źródło
Naprawdę podoba mi się podejście opublikowane przez „orange80”. Jest elegancki, ponieważ możesz go ustawić raz i zapomnieć.
Inne podejścia wymagają zrobienia czegoś innego (zadzwoń do czegoś innego niż zwykły)
console.log()
każdym razem ), co tylko prosi o kłopoty… Wiem, że w końcu zapomnę.Posunąłem się o krok dalej, pakując kod w funkcję narzędzia, którą możesz wywołać raz na początku swojego javascript, w dowolnym miejscu, o ile ma to miejsce przed logowaniem. (Instaluję to w routerze do obsługi danych zdarzeń mojej firmy. Pomoże to uprościć projekt nowego interfejsu administratora w różnych przeglądarkach).
źródło
/**/console.log("...");
więc łatwo jest wyszukać i zlokalizować kod tymczasowy.Jeśli otrzymujesz „niezdefiniowane” dla wszystkich wywołań pliku console.log, prawdopodobnie oznacza to, że nadal masz załadowany stary firebuglite (firebug.js). Zastąpi wszystkie prawidłowe funkcje pliku konsoli.log IE8, nawet jeśli istnieją. I tak mi się przydarzyło.
Sprawdź, czy nie ma innego kodu przesłaniającego obiekt konsoli.
źródło
Najlepszym rozwiązaniem dla każdej przeglądarki bez konsoli jest:
źródło
Jest tyle odpowiedzi. Moim rozwiązaniem tego było:
Krótko mówiąc, jeśli plik console.log nie istnieje (lub w tym przypadku nie jest otwarty), zapisz dziennik w globalnej macierzy przestrzeni nazw. W ten sposób nie nękają Cię miliony alertów i nadal możesz przeglądać dzienniki przy otwartej lub zamkniętej konsoli programisty.
źródło
źródło
window.console.log()
może być dostępny w IE8, nawet jeśliconsole.log()
nie jest?typeof window.console.log === "object"
, że nie"function"
Oto mój „IE proszę nie upaść”
źródło
Znalazłem to na github :
źródło
Używam podejścia Waltera z góry (patrz: https://stackoverflow.com/a/14246240/3076102 )
Mieszam w rozwiązaniu, które znalazłem tutaj https://stackoverflow.com/a/7967670, aby poprawnie wyświetlać obiekty.
Oznacza to, że funkcja pułapki staje się:
Mam nadzieję, że to jest pomocne :-)
źródło
Działa w IE8. Otwórz narzędzia programistyczne IE8, naciskając klawisz F12.
źródło
Podoba mi się ta metoda (używanie gotowej dokumentacji jquery) ... pozwala ona korzystać z konsoli nawet w ie ... tylko złapać to, że musisz przeładować stronę, jeśli otworzysz np. Narzędzia programistyczne po załadowaniu strony ...
może być łatwiejszy, biorąc pod uwagę wszystkie funkcje, ale używam tylko dziennika, więc to właśnie robię.
źródło
Oto wersja, która będzie logować się do konsoli, gdy narzędzia programistyczne są otwarte, a nie gdy są zamknięte.
źródło
apply
metody.Stwórz własną konsolę w HTML .... ;-) Można to poprawić, ale możesz zacząć od:
źródło