2016-05-25 2 views
1

Ich habe ein seltsames Problem mit IE und Edge. Wenn ich zum ersten Mal eine Seite lade, funktioniert alles einwandfrei. Wenn ich jedoch von der Seite weg navigiere, indem ich auf eine neue Seite auf der selben Website gehe, wird JavaScript auf der neuen Seite Fehler anzeigen. Wenn ich jetzt auf die vorherige Seite zurückgehe, wird es auch nicht mehr richtig funktionieren und dev. Die Konsole zeigt Fehler an.IE/Edge JavaScript wird nicht korrekt ausgeführt, wenn aus dem Cache gelesen

Wenn ich Dev verlassen. Konsole während der Navigation geöffnet und versucht, Haltepunkte zu setzen, an denen die von der Konsole erwähnten Fehler auftreten, werden sie nicht ausgelöst.

Wenn ich die Seite aktualisiere (mit oder ohne Dev. Tools geöffnet) funktioniert alles wie erwartet.

In Chrome und FireFox funktioniert alles.

Hier ist die Seite in Frage: link to problem page

Sie das erste Mal (Leider nach den Richtlinien wurde ich es als ein Bild einreichen gezwungen, und ich war eine direkte Verbindung nicht senden darf) lade es, alles sollte in Ordnung sein. Wenn Sie jedoch auf "Produkte" klicken, wird die Seite "Produkte" mit JS-Fehlern geladen, und wenn Sie zurückgehen, wird die ursprüngliche Seite nicht mehr funktionieren.

Von meinen Versuchen, das Problem zu lösen, scheint es, dass es mit der Tatsache zu tun hat, dass IE Skripte nicht mehr in der richtigen Reihenfolge ausführt, sobald sie zwischengespeichert sind. Warum funktioniert es dann immer in anderen Browsern?

Antwort

0

Dies ist nicht die Antwort, auf die ich gehofft hatte, aber ich fand eine Abhilfe (obwohl das ursprüngliche IE/Edge-Verhalten unerklärt bleibt).

Im Grunde war ich dynamisch laden Skripte wie so:

function bmpl_loadScript(scriptName, callback, async, crossorigin, integrity, defer) { 
     if (!bmpl_arr[scriptName]) { 
      bmpl_arr[scriptName] = true; 
      var body = document.getElementsByTagName('body')[0]; 
      var script = document.createElement('script'); 
      script.type = 'text/javascript'; 
      script.src = scriptName; 
      if (async) { script.async = 1; } 
      if (defer) { script.defer = 1; } 
      if (integrity) { script.integrity = integrity; } 
      if (crossorigin) { script.crossOrigin = crossorigin; } 
      if (callback) { script.onload = callback; } 
      body.appendChild(script); 
     } 
    } 

    //Load scripts 
    //bootstrap depends on jquery, and scripts depends on both, hence they are not async and are nested 
    bmpl_loadScript('//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js', function() { 
     bmpl_loadScript('//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js', function() { 
      bmpl_loadScript('/v3/js/scripts.min.js', function() { 
       //Do final JS loading here 
      }, false,false,false,true); 
     }, false, 'anonymous', 'sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS',true); 
    },false,false,false,true); 

Also, es scheint, im Gegensatz zu Chrome und Firefox, IE/Rand kann nicht herausfinden, wie die gleiche Routine ordnungsgemäß ausgeführt werden, wenn Skripte bereits im Cache ist. Deshalb musste ich das Original zurück gehen:

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> 
<script>window.jQuery || document.write('<script src="/v3/js/jquery.fallback.min.js"><\/script>')</script> 
<script>bmpl_window_onload();</script> 
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script> 
<script>jQuery.fn.tooltip || document.write('<script src="/v3/js/bootstrap.fallback.min.js"><\/script>')</script> 
<script src="/v3/js/scripts.min.js"></script> 

Dies hat den zusätzlichen Vorteil, dass es für Fallbacks bei Laden von CDN ermöglicht ausfällt.

Der Grund, warum ich mit dem Dynamic Loading-Ansatz gehen wollte, war, dass Googles Tool "Speed ​​Insights" sich über das JS-Blockieren von Renderern beschwerte. Aber ich denke, die erste Priorität sollte sein, dass ein Standort funktioniert, und dann, wie schnell er lädt, wenn man bedenkt, dass der Unterschied zwischen den Ladegeschwindigkeiten wahrscheinlich minimal sein würde.

Ich hoffe immer noch, jemand könnte ein Licht auf dieses IE/Edge-Verhalten werfen, also werde ich dies nicht als eine Antwort markieren.

Verwandte Themen