2013-07-22 12 views
7

Ich war neugierig, ob es eine Möglichkeit, den Benutzer zu finden, die Schaltfläche "Stop Navigation" im Browser mit JavaScript (oder, noch besser, jQuery.) Zum Beispiel, wenn Sie Klicken Sie auf einen Link für eine Webseite, deren Laden eine Weile dauert. Möglicherweise möchten Sie einen rotierenden Loader anzeigen. Was aber, wenn der Benutzer die Navigation zur Seite abbricht? Gibt es da schon etwas zu entdecken, dass man den Spinning Loader, den man einsetzt, loswird?Erkennen eines Abbrechen in der Navigation mit Javascript oder jQuery

EDIT: Ich habe ein bisschen mehr Forschung, und es scheint in Javascript ein OnStop Ereignis zu sein, aber würden Sie es nicht wissen, es funktioniert nur im Internet Explorer. Wenn jemand andere Ideen hat, um eine Cross-Browser-Lösung wie onStop zu implementieren, wäre das wunderbar, aber wenn nicht, werde ich meine eigene Frage in ein paar Tagen beantworten, um das zu beenden.

EDIT 2: https://stackoverflow.com/a/16216193 sagt, es ist nicht möglich. Wie auch einige andere Antworten.

+2

Ich denke nicht, dass es einen zuverlässigen Weg geben würde, da der STOP auftreten kann, bevor Ihr JS sogar auf der Seite geladen wird. –

Antwort

1

In Ordnung, wie versprochen, werde ich meine eigene Frage beantworten.

Ich habe lange darüber nachgedacht - und ich habe eine Lösung gefunden. Ich konnte es nicht im Code arbeiten lassen (ich habe nicht zu viel versucht), aber es sollte in der Theorie funktionieren.

Also dachte ich über die Kriterien der Entscheidung, wann eine Webseite entscheiden sollte zu stoppen wurde aufgerufen. Ich kam mit diesem:

  • Wenn das Skript nach einer angemessenen Zeit nicht gestorben ist, kann davon ausgegangen werden, Navigation wurde abgebrochen.

Dann kann ein jQuery-Ereignis auf die body oder etwas ähnliches gefeuert werden. Aber was macht "eine vernünftige Menge an Zeit?" Ich dachte mir, dass es teilweise auf Seiten-Render-Zeit basieren würde (Bilder holen usw.), um eine Vorstellung davon zu bekommen, wie schnell das Internet des Benutzers ist. Das kann durch zu tun bekommen werden:

var start = new Date(); 
var time; 
$("body").load(function() { 
    time = new Date() - start; 
    ... 
}); 

Multiplizieren Sie das mit einem Koeffizienten (vielleicht 3 oder etwas) und eine approxamate Transferzeit erhalten. (Dies müsste angepasst werden, um zu berücksichtigen, wie lange es dauern würde, bis der Server die nächste Seite erzeugt, abhängig davon, wie dynamisch er ist.) Dann würden Sie mit dieser neuen Datei

schreiben
$("a").click(function() { //Anything that could go to another page should filter through here 
    setInterval(function() {$(document).trigger("navstopped");},time*3); 
} 
$(document).on("navstopped") { 
    //Do stuff now that we assume navigation stopped. 
} 

Angenommen. Das ist wirklich alles, was wir hier machen. Wir haben möglicherweise eine inkonsistente Internetverbindung, schnell eine Minute, langsam die nächste. Die Serverlast könnte ebenfalls inkonsistent sein. Vielleicht liefert es Bilder wie ein Ninja für diese Seite, aber es wird mit einer Menge von Anfragen am nächsten geschlagen, wodurch es die nächste Seite ein bisschen langsamer erzeugt/bedient. Also nehmen wir an, dass etwas die Navigation unterbrochen hat, wie, , aber wir sind nicht sicher.

Jetzt könnte natürlich in Verbindung mit IE onStop Event verwendet werden, aber das war wirklich die einzige Cross-Browser-Lösung, die ich mir vorstellen konnte. Ich konnte es nicht zur Arbeit bringen, aber vielleicht könnte ein jQuery Gott in der Lage sein, in der Zukunft.

Vor dem Beitrag bearbeiten: Schon bevor ich das gepostet habe, hatte ich eine andere Idee. Weitere Browser unterstützen onAbort.Wenn wir ein Bild haben, das niemals geladen wird und der Benutzer auf Stop klickt, wird onAbort ausgelöst? Auch wenn eine andere Webseite geladen wird? Es erfordert Tests, aber das kann auch funktionieren. Ich mag meine erste Idee jedoch besser. Obwohl instabil, ist es stabiler als diese Cockamamie-Idee und mir ist klar, dass dies eine schlechte Übung sein könnte.

+1

Wow, das ist ziemlich cool. Ich werde mit einigen Ideen herumspielen, halten Sie uns auf dem Laufenden. –

+0

Irgendwelche Updates zu diesem Thema? – ChrFin

+0

Haben Sie Ihre Ideen schon getestet? –

Verwandte Themen