Używam tego małego skryptu, aby dowiedzieć się, czy Firebug jest otwarty:
if (window.console && window.console.firebug) {
//is open
};
I działa dobrze. Teraz szukałem przez pół godziny, aby znaleźć sposób na wykrycie, czy wbudowana internetowa konsola programisty Google Chrome jest otwarta, ale nie mogłem znaleźć żadnej wskazówki.
To:
if (window.console && window.console.chrome) {
//is open
};
nie działa.
EDYTOWAĆ:
Wygląda więc na to, że nie można wykryć, czy konsola Chrome jest otwarta. Jest jednak „ hack ”, który działa, ale ma kilka wad:
- nie będzie działać, gdy konsola jest oddokowana
- nie będzie działać, gdy konsola jest otwarta podczas ładowania strony
Więc na razie wybiorę odpowiedź Unsigned, ale jeśli ktoś1 wpadnie na genialny pomysł, może nadal odpowiedzieć, a ja zmieniam wybraną odpowiedź! Dzięki!
.message
jest pobierany (co dzieje się, gdy debugger jest otwarty, ponieważ widzisz komunikat), ale niestety dzieje się tak również, gdy debugger nie jest otwarty. Chciałbym wiedzieć, jak to zrobić, jeśli istnieje ...Odpowiedzi:
requestAnimationFrame (koniec 2019 r.)
Pozostawiając te poprzednie odpowiedzi tutaj dla kontekstu historycznego. Obecnie podejście Muhammada Umera działa w Chrome 78, z dodatkową zaletą wykrywania zarówno zamkniętych, jak i otwartych wydarzeń.
funkcja toString (2019)
Kredyt dla Overcl9ck „s komentarz na tej odpowiedzi. Zastąpienie wyrażenia regularnego
/./
pustym obiektem funkcji nadal działa.wyrażenie regularne toString (2017–2018)
Ponieważ oryginalnego pytającego nie ma już w pobliżu i nadal jest to akceptowana odpowiedź, dodanie tego rozwiązania w celu zwiększenia widoczności. Zasługa Antonin Hildebrand „s komentarz na zswang ” s odpowiedź . To rozwiązanie wykorzystuje fakt, że
toString()
nie jest wywoływane dla zarejestrowanych obiektów, chyba że konsola jest otwarta.console.profiles (2013)
Aktualizacja:
console.profiles
została usunięta z Chrome. To rozwiązanie już nie działa.Podziękowania dla Paula Irisha za wskazanie tego rozwiązania z Discover DevTools przy użyciu profilera:
window.innerHeight (2011)
Ta inna opcja może wykryć otwieranie zadokowanego inspektora po załadowaniu strony, ale nie będzie w stanie wykryć niezadokowanego inspektora lub jeśli inspektor był już otwarty podczas ładowania strony. Istnieje również pewien potencjał fałszywych trafień.
źródło
function() {}
zamiast wyrażenia regularnegoChrome 65+ (2018)
demo: https://jsbin.com/cecuzeb/edit?output (aktualizacja 2018-03-16)
pakiet: https://github.com/zswang/jdetects
Podczas drukowania „Elementu” narzędzia programistyczne Chrome otrzymają swój identyfikator
Inna wersja (z komentarzy)
Wydrukuj zwykłą zmienną :
źródło
__defineGetter__
jest przestarzały, więc zmieniłem naObject.defineProperty(element, 'id', {get:function() {checkStatus='on';}});
... nadal działa.setInterval
Bardzo niezawodny hack
Zasadniczo ustaw getter we właściwości i zaloguj się w konsoli. Najwyraźniej rzecz jest dostępna tylko wtedy, gdy konsola jest otwarta.
https://jsfiddle.net/gcdfs3oo/44/
źródło
throw new Error("Dev tools checker");
? Ponieważ działa bez niego.Stworzyłem devtools-detection, które wykrywa, kiedy DevTools jest otwarte:
Możesz także posłuchać wydarzenia:
Nie działa, gdy DevTools jest oddokowane. Jednak działa z Chrome / Safari / Firefox DevTools i Firebug.
źródło
Znalazłem sposób, aby sprawdzić, czy konsola Chrome jest otwarta, czy nie. To wciąż hack, ale jest o wiele dokładniejszy i będzie działał pod warunkiem, że konsola jest odłączona lub nie.
Zasadniczo uruchomienie tego kodu przy zamkniętej konsoli zajmuje około ~ 100 mikrosekund, a gdy konsola jest otwarta, zajmuje około dwa razy więcej ~ 200 mikrosekund.
(1 milisekunda = 1000 mikrosekund)
Więcej o tym pisałem tutaj .
Demo jest tutaj .
Aktualizacja:
@zswang znalazł aktualnie najlepsze rozwiązanie - sprawdź jego odpowiedź
źródło
Jeśli Twoim celem jest zablokowanie narzędzi programistycznych, spróbuj tego (znalazłem bardziej skomplikowaną wersję w miejscu, w którym kod JS został zaciemniony, jest to bardzo denerwujące):
źródło
Istnieje trudny sposób sprawdzenia tego pod kątem rozszerzeń z uprawnieniem do kart:
Możesz również sprawdzić, czy jest otwarta dla Twojej strony:
źródło
Napisałem o tym post na blogu: http://nepjua.org/check-if-browser-console-is-open/
Potrafi wykryć, czy jest zadokowany, czy oddokowany
źródło
źródło
test online
nie działa.Narzędzia programistyczne Chrome są tak naprawdę tylko częścią biblioteki WebCore WebKit. To pytanie dotyczy przeglądarki Safari, Chrome i wszystkich innych użytkowników WebCore.
Jeśli rozwiązanie istnieje, będzie oparte na różnicy w DOM, kiedy inspektor sieci WebKit jest otwarty i kiedy jest zamknięty. Niestety jest to rodzaj problemu z kury i jaja, ponieważ nie możemy używać inspektora do obserwacji DOM, gdy inspektor jest zamknięty.
To, co możesz zrobić, to napisać trochę JavaScript, aby zrzucić całe drzewo DOM. Następnie uruchom go raz, gdy inspektor jest otwarty i raz, gdy inspektor jest zamknięty. Każda różnica w DOM jest prawdopodobnie efektem ubocznym inspektora sieci i być może uda nam się go użyć do sprawdzenia, czy użytkownik sprawdza, czy nie.
To łącze jest dobrym początkiem dla skryptu zrzutu DOM, ale będziesz chciał zrzucić cały
DOMWindow
obiekt, a nie tylkodocument
.Aktualizacja:
Wygląda na to, że można to teraz zrobić. Wypróbuj Chrome Inspector Detector
źródło
Możesz także spróbować tego: https://github.com/sindresorhus/devtools-detect
źródło
Podejście Muhammada Umera zadziałało dla mnie i używam Reacta, więc zdecydowałem się stworzyć rozwiązanie hooks:
UWAGA: Kiedy się z tym bawiłem, nie działało to najdłużej i nie mogłem zrozumieć, dlaczego. Usunąłem,
console.dir(element);
co jest krytyczne dla działania. Usuwam większość nieopisowych akcji konsoli, ponieważ zajmują one tylko miejsce i zwykle nie są potrzebne do funkcji, więc dlatego nie działało to dla mnie.Aby z niego skorzystać:
Mam nadzieję, że pomoże to każdemu, kto używa React. Jeśli ktoś chciałby to rozwinąć, chciałbym w pewnym momencie zatrzymać nieskończoną pętlę (ponieważ nie używam tego w każdym komponencie) i znaleźć sposób na utrzymanie konsoli w czystości.
źródło
Jeśli jesteś programistą, który robi coś podczas programowania. Sprawdź to rozszerzenie do Chrome. Pomaga wykryć, kiedy Chrome Devtoos jest otwarty lub zamknięty.
https://chrome.google.com/webstore/detail/devtools-status-detector/pmbbjdhohceladenbdjjoejcanjijoaa?authuser=1
To rozszerzenie pomaga programistom JavaScript wykrywać, kiedy Chrome Devtools jest otwarty lub zamknięty na bieżącej stronie. Gdy Chrome Devtools zamyka / otwiera się, rozszerzenie zgłosi zdarzenie o nazwie „devtoolsStatusChanged” w elemencie window.document.
Oto przykładowy kod:
źródło
Niektóre odpowiedzi przestaną działać w Chrome 65. Oto alternatywa ataku czasowego, która działa całkiem niezawodnie w Chrome i jest znacznie trudniejsza do złagodzenia niż
toString()
metoda. Niestety nie jest to takie niezawodne w Firefoksie.źródło
Jeśli chodzi o Chrome / 77.0.3865.75, wersja 2019 nie działa. toString wywołuje natychmiast, bez otwierania Inspektora.
źródło