Ich benutze dieses kleine Skript, um herauszufinden, ob Firebug geöffnet ist:
if (window.console && window.console.firebug) {
//is open
};
Und es funktioniert gut. Jetzt suchte ich eine halbe Stunde lang nach einer Möglichkeit, festzustellen, ob die integrierte Webentwicklerkonsole von Google Chrome geöffnet ist, konnte jedoch keinen Hinweis finden.
Dies:
if (window.console && window.console.chrome) {
//is open
};
funktioniert nicht
BEARBEITEN:
Es scheint also nicht möglich zu sein, festzustellen, ob die Chrome-Konsole geöffnet ist. Aber es gibt einen " Hack ", der funktioniert, mit einigen Nachteilen:
- funktioniert nicht, wenn die Konsole nicht angedockt ist
- funktioniert nicht, wenn die Konsole beim Laden der Seite geöffnet ist
Also werde ich vorerst die Antwort von Unsigned wählen, aber wenn jemand eine brillante Idee hat, kann er gerne noch antworten und ich ändere die ausgewählte Antwort! Vielen Dank!
.message
abgerufen wird (was passiert, wenn der Debugger geöffnet ist, weil Sie die Meldung sehen), aber leider passiert dies auch, wenn der Debugger nicht geöffnet ist. Ich würde gerne einen Hack dafür wissen, wenn er existiert ...Antworten:
requestAnimationFrame (Ende 2019)
Lassen Sie diese vorherigen Antworten hier für den historischen Kontext. Derzeit ist Muhammad Ulers Ansatz funktioniert in Chrome 78 mit dem zusätzlichen Vorteil, dass sowohl geschlossene als auch offene Ereignisse erkannt werden.
Funktion toString (2019)
Dank an Overcl9cks Kommentar zu dieser Antwort. Das Ersetzen des regulären Ausdrucks
/./
durch ein leeres Funktionsobjekt funktioniert weiterhin.Regex toString (2017-2018)
Da der ursprüngliche Fragesteller nicht mehr in der Nähe zu sein scheint und dies immer noch die akzeptierte Antwort ist, fügen Sie diese Lösung zur besseren Sichtbarkeit hinzu. Kredit geht an Antonin Hildebrand ‚s Kommentar auf zswang ‘ s Antwort . Diese Lösung nutzt die Tatsache, dass
toString()
protokollierte Objekte nur aufgerufen werden, wenn die Konsole geöffnet ist.console.profiles (2013)
Aktualisieren:
console.profiles
wurde aus Chrome entfernt. Diese Lösung funktioniert nicht mehr.Vielen Dank an Paul Irish für den Hinweis auf diese Lösung von Discover DevTools mit dem Profiler:
window.innerHeight (2011)
Diese andere Option erkennt, dass der angedockte Inspektor nach dem Laden der Seite geöffnet wird, erkennt jedoch keinen nicht angedockten Inspektor oder ob der Inspektor beim Laden der Seite bereits geöffnet war. Es besteht auch die Möglichkeit von Fehlalarmen.
quelle
function() {}
anstelle einesChrome 65+ (2018)
Demo: https://jsbin.com/cecuzeb/edit?output (Update am 16.03.2018)
Paket: https://github.com/zswang/jdetects
Beim Drucken von "Element" erhalten Chrome-Entwicklertools ihre ID
Eine andere Version (aus Kommentaren)
Drucken Sie eine reguläre Variable:
quelle
__defineGetter__
veraltet ist, also habe ich zuObject.defineProperty(element, 'id', {get:function() {checkStatus='on';}});
... immer noch gearbeitet.setInterval
Sehr zuverlässiger Hack
Legen Sie im Grunde einen Getter für die Eigenschaft fest und melden Sie ihn in der Konsole an. Anscheinend wird auf das Ding nur zugegriffen, wenn die Konsole geöffnet ist.
https://jsfiddle.net/gcdfs3oo/44/
quelle
throw new Error("Dev tools checker");
? Weil es ohne funktioniert.Ich habe devtools-detect erstellt, das erkennt, wann DevTools geöffnet ist:
Sie können sich auch ein Ereignis anhören:
Es funktioniert nicht, wenn DevTools nicht angedockt ist. Funktioniert jedoch mit den Chrome / Safari / Firefox DevTools und Firebug.
quelle
Ich habe einen Weg gefunden, um festzustellen, ob die Chrome-Konsole geöffnet ist oder nicht. Es ist immer noch ein Hack, aber es ist viel genauer und funktioniert, ob die Konsole nicht angedockt ist oder nicht.
Grundsätzlich dauert das Ausführen dieses Codes bei geschlossener Konsole ungefähr 100 Mikrosekunden, und während die Konsole geöffnet ist, dauert es ungefähr doppelt so viel wie 200 Mikrosekunden.
(1 Millisekunde = 1000 Mikrosekunden)
Ich habe mehr darüber geschrieben hier .
Demo ist da .
Aktualisieren:
@zswang hat die derzeit beste Lösung gefunden - lesen Sie seine Antwort
quelle
Wenn Sie die Entwicklertools blockieren möchten, versuchen Sie Folgendes (ich habe eine kompliziertere Version an einer Stelle gefunden, an der JS-Code verschleiert wurde, was sehr ärgerlich ist):
quelle
Es gibt eine schwierige Möglichkeit, mit der Berechtigung "Tabs" nach Erweiterungen zu suchen:
Sie können auch überprüfen, ob es für Ihre Seite geöffnet ist:
quelle
Ich habe einen Blog-Beitrag darüber geschrieben: http://nepjua.org/check-if-browser-console-is-open/
Es kann erkennen, ob es angedockt oder nicht angedockt ist
quelle
quelle
test online
hat nicht funktioniert.Die Chrome-Entwicklertools sind eigentlich nur ein Teil der WebCore-Bibliothek von WebKit. Diese Frage gilt also für Safari, Chrome und alle anderen WebCore-Kunden.
Wenn eine Lösung vorhanden ist, basiert sie auf einem Unterschied im DOM, wenn der WebKit-Webinspektor geöffnet und geschlossen ist. Leider ist dies eine Art Henne-Ei-Problem, da wir den Inspektor nicht verwenden können, um das DOM zu beobachten, wenn der Inspektor geschlossen ist.
Möglicherweise können Sie ein wenig JavaScript schreiben, um den gesamten DOM-Baum zu sichern. Führen Sie es dann einmal aus, wenn der Inspektor geöffnet ist, und einmal, wenn der Inspektor geschlossen ist. Jeder Unterschied im DOM ist wahrscheinlich eine Nebenwirkung des Webinspektors, und wir können ihn möglicherweise verwenden, um zu testen, ob der Benutzer prüft oder nicht.
Dieser Link ist ein guter Anfang für ein DOM-Dumping-Skript, aber Sie möchten
DOMWindow
nicht nur das gesamte Objekt sicherndocument
.Aktualisieren:
Sieht so aus, als gäbe es jetzt eine Möglichkeit, dies zu tun. Schauen Sie sich den Chrome Inspector Detector an
quelle
Sie können dies auch versuchen: https://github.com/sindresorhus/devtools-detect
quelle
Wenn Sie Entwickler sind, die während der Entwicklung Dinge tun. Schauen Sie sich diese Chrome-Erweiterung an. Es hilft Ihnen zu erkennen, wann Chrome Devtoos geöffnet oder geschlossen wird.
https://chrome.google.com/webstore/detail/devtools-status-detector/pmbbjdhohceladenbdjjoejcanjijoaa?authuser=1
Mit dieser Erweiterung können Javascript-Entwickler erkennen, wann Chrome Devtools auf der aktuellen Seite geöffnet oder geschlossen ist. Wenn Chrome Devtools geschlossen / geöffnet wird, löst die Erweiterung ein Ereignis mit dem Namen 'devtoolsStatusChanged' im Element window.document aus.
Dies ist ein Beispielcode:
quelle
Einige Antworten hier funktionieren in Chrome 65 nicht mehr. Hier ist eine Timing-Angriffsalternative , die in Chrome ziemlich zuverlässig funktioniert und viel schwerer zu entschärfen ist als die
toString()
Methode. Leider ist es in Firefox nicht so zuverlässig.quelle
Wie für Chrome / 77.0.3865.75 funktioniert eine Version von 2019 nicht. toString wird sofort aufgerufen, ohne dass der Inspektor geöffnet wird.
quelle
Der Ansatz von Muhammad Umer hat bei mir funktioniert und ich verwende React. Deshalb habe ich beschlossen, eine Hooks-Lösung zu finden:
HINWEIS: Als ich damit herumgespielt habe, hat es die längste Zeit nicht funktioniert und ich konnte nicht herausfinden, warum. Ich hatte gelöscht,
console.dir(element);
was für die Funktionsweise entscheidend ist. Ich lösche die meisten nicht beschreibenden Konsolenaktionen, da sie nur Speicherplatz beanspruchen und normalerweise für die Funktion nicht erforderlich sind. Deshalb hat es bei mir nicht funktioniert.Um es zu benutzen:
Ich hoffe, dies hilft jedem, der React verwendet. Wenn jemand dies erweitern möchte, möchte ich in der Lage sein, die Endlosschleife irgendwann zu stoppen (da ich dies nicht in jeder Komponente verwende) und einen Weg zu finden, die Konsole sauber zu halten.
quelle