2016-07-14 16 views
1

Gibt es eine Möglichkeit zu verhindern, dass der Fensterstandort-Hash bewirkt, dass das Dokument in IE10 "springt"? Der folgende Code löst sowohl Chrome als auch Firefox.Verhindern location.hash "Springen" in IE10

if (location.hash) { 
    setTimeout(function() { 
    window.scrollTo(0,0); 
    }, 1); 
} 

Als Hinweis, habe ich das auch versucht, mit jQuery $(window) als gut, aber ohne Glück.

+3

Warum Verwenden Sie den Hash, wenn die Seite nicht gescrollt werden soll? – epascarello

+0

Ich verweise auf eine bestimmte Registerkarte von einer anderen Seite - ich möchte, dass der Benutzer auf den Inhalt innerhalb dieser Registerkarte zugreift, ohne die Seite mit der Registerkarte/dem Hash zu erzwingen (in der linken Navigation auf halber Seite der Seite)). Der Inhalt beginnt oben, wo der Hash lebt. – laurendorman

Antwort

0

Nachdem er mit Lauren treffen wir bestimmt:

  • window.scrollTo(0,0) Werke in 10 IE von Entwickler-Tools öffnen und den Befehl ausführen. Wir wussten also, dass der Code isoliert funktioniert, aber es gab noch etwas anderes, was wir falsch machten oder dass Code auf der Seite war, der verhinderte, dass die Seite an die Spitze ging.
  • Als schnellen Hack haben wir das Intervall von 1 Millisekunde auf 2000 Millisekunden erhöht, um zu sehen, ob es eine Race-Bedingung war. Diese funktioniert aber nicht wünschenswert wegen der Seite flackern/springen. Wir haben den Wert von 2000 Millisekunden auf einen niedrigeren Wert gebracht, um den Flimmereffekt zu minimieren.
  • Seite würde nicht nach oben scrollen nur, wenn Sie zuerst von einer anderen Route zur Seite gehen, nicht nur die Seite neu laden ... vielleicht einige andere JavaScript auf der Seite, die verschiedene logische Pfade verursachen.

Gedanken:

  • Vielleicht geschah nur in IE10 durch die Ausführung von JavaScript verlangsamen. Andere Browser analysieren und interpretieren JavaScript schneller.
  • Scroll konnte über Abfrageparameter anstelle von Ankern entfernt werden, würde aber dazu führen, dass Code refaktorisiert wird und nicht so hübsche URL-Pfade. dh https://<url>?tab-name=TabNameToSelect
  • Scroll könnte über Server-Seite oder Client-Seite Routing entfernt werden, aber würde größeren Entwicklungsaufwand erfordern ... Routen Muster wie {controller}/{action}/{tab-id} haben könnte oder {controller}/{action}/{item-id}/{tab-id}

schnelle Lösung:

// quick and dirty franken'fix 
if (location.hash) { 
    setTimeout(function() { 
    window.scrollTo(0,0); 
    }, 250); // increment interval to "prevent" race condition 
}