667 Stimmen

Warum funktioniert JavaScript nur nach einmaligem Öffnen der Entwicklertools im IE?

IE9 Bug - JavaScript funktioniert nur nach einmaligem Öffnen der Entwicklertools.

Unsere Website bietet den Nutzern kostenlose PDF-Downloads an und verfügt über eine einfache "Passwort eingeben zum Herunterladen"-Funktion. Allerdings funktioniert sie im Internet Explorer überhaupt nicht.

Davon können Sie sich selbst überzeugen Beispiel .

Der Download-Pass ist "makeuseof". In allen anderen Browsern funktioniert er einwandfrei. Im IE bewirken beide Schaltflächen nichts.

Das Merkwürdigste, was ich festgestellt habe, ist, dass, wenn man die Entwickler-Symbolleiste mit F12 öffnet und schließt, plötzlich alles funktioniert.

Wir haben es mit dem Kompatibilitätsmodus und so weiter versucht, aber nichts hat einen Unterschied gemacht.

Wie bringe ich das im Internet Explorer zum Laufen?

4 Stimmen

Cross-Browser-Wrapper verwenden: github.com/MichaelZelensky/log.js

3 Stimmen

Eine gute Alternative, wenn Sie einen Build-Schritt haben, ist die Verwendung von etwas wie gulp-strip-debug . Sie beseitigt alle console.* Methoden, ideal für Produktions-Builds oder Tests im IE.

17 Stimmen

Für zukünftige Googler: Ich hatte die gleichen Symptome, aber im IE11. Nun, es stellte sich heraus, dass die Antwort nicht mit dem console sondern auf meine Verwendung von Angular und Caching von Get-Anfragen. Siehe Antworten ici y ici für mehr.

18voto

todotresde Punkte 1700

Ich schätze, das könnte helfen, indem man dies vor jedem Tag von javascript:

try{
  console
}catch(e){
   console={}; console.log = function(){};
}

12 Stimmen

try catch um festzustellen, dass eine Variable existiert, ist eine schlechte Idee. Es ist nicht nur langsam, sondern wenn Sie mehr als eine Anweisung in Ihrem Try-Block haben, könnten Sie eine Ausnahme aus einem anderen Grund erhalten. Verwenden Sie dies nicht, sondern verwenden Sie zumindest if (typeof console == 'undefined')

9voto

Oskar S. Punkte 109

Wenn Sie AngularJS Version 1.X verwenden, können Sie den $log-Dienst verwenden, anstatt direkt console.log zu verwenden.

Einfacher Dienst für die Protokollierung. Die Standardimplementierung schreibt die Nachricht sicher in die Konsole des Browsers (falls vorhanden).

https://docs.angularjs.org/api/ng/service/$log

Wenn Sie also etwas Ähnliches haben wie

angular.module('logExample', [])
  .controller('LogController', ['$scope', function($scope) {
    console.log('Hello World!');
 }]);

können Sie ihn ersetzen durch

angular.module('logExample', [])
  .controller('LogController', ['$scope', '$log', function($scope, $log) {
    $log.log('Hello World!');
 }]);

Angular 2+ verfügt über keinen eingebauten Protokolldienst .

1 Stimmen

Dies half mir, danke - für alle anderen mit Typescript, ist dies die "ILogService" in den Angular-Definitionen

0 Stimmen

IIRC mit $log bewirkt, dass der Ort der Log-Anweisung verdeckt wird, anders als bei der Verwendung von console.log. Nicht so toll aus meiner Erfahrung während der Entwicklung.

7voto

Itsik Mauyhas Punkte 3636

Wenn Sie Folgendes verwenden angular und dh 9, 10 o edge verwenden:

myModule.config(['$httpProvider', function($httpProvider) {
    //initialize get if not there
    if (!$httpProvider.defaults.headers.get) {
        $httpProvider.defaults.headers.get = {};    
    }    

    // Answer edited to include suggestions from comments
    // because previous version of code introduced browser-related errors

    //disable IE ajax request caching
    $httpProvider.defaults.headers.get['If-Modified-Since'] = 'Mon, 26 Jul 1997 05:00:00 GMT';
    // extra
    $httpProvider.defaults.headers.get['Cache-Control'] = 'no-cache';
    $httpProvider.defaults.headers.get['Pragma'] = 'no-cache';
}]);

Vollständige Deaktivierung cache .

5voto

Vilhelm Punkte 187

Bei mir ist das im IE 11 passiert. Und ich rief die Funktion jquery.load auf. Also habe ich es die alte Art und Weise und setzen etwas in der Url zu deaktivieren Caching.

$("#divToReplaceHtml").load('@Url.Action("Action", "Controller")/' + @Model.ID + "?nocache=" + new Date().getTime());

4voto

schnatterer Punkte 6859

Ich habe noch eine weitere Alternative für die Lösungen, die von runeks y todotresde die auch die in den Kommentaren erörterten Fallstricke vermeidet Spudley die Antwort:

        try {
            console.log(message);
        } catch (e) {
        }

Es ist zwar etwas dürftig, aber dafür ist es übersichtlich und deckt alle Protokollierungsmethoden ab, die in runeks Die Antwort hat den großen Vorteil, dass man jederzeit das Konsolenfenster des IE öffnen kann und die Protokolle eintrudeln.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X