2009-07-30 9 views
0

Meine Anwendung hat Seiten mit mehreren Registerkarten, die einfach den sichtbaren Inhalt wechseln. Die Seite enthält jedoch auch Links, durch die Tabs zur Seite hinzugefügt werden. Außerdem merkt sich die Anwendung (mit Cookies), welche Registerkarte Sie zuletzt für den Fall aufgerufen haben, dass die Seite aktualisiert wird (strikte Cache-Einstellungen verursachen auch bei Verwendung der Vor- und Zurück-Schaltflächen eine Aktualisierung).Kann JavaScript den Unterschied zwischen dem Verlassen durch den Zurück-Button oder einem Link erkennen?

Mein Problem ist, dass beim ersten Besuch dieser Seiten die erste Registerkarte (Registerkarte A) angezeigt werden sollte. Dann klicken Sie auf einen Link, und es fügt einen Tab hinzu, und es erinnert sich an diesen neuen Tab (Tab B). Wenn Sie jedoch zurückschlagen, sieht es jetzt so aus, als hätte es nichts getan, weil es sich die Registerkarte merkt und anzeigt, auf die Sie zuletzt geklickt haben (Tab B).

Erinnerung an Tab B ist wünschenswert, wenn Sie auf forward auf eine neue Seite klicken und dann verwenden Sie unsere In-Verlauf der Anwendung, um zur vorherigen Seite zurückzukehren. Es ist jedoch unerwünscht, wenn Sie auf die Zurück-Schaltfläche klicken, weil Sie möchten, dass Tab A erneut angezeigt wird, so wie es bei Ihrer Ankunft geschehen ist.

Meine Frage ist, ob das JavaScript onunload Ereignis den Unterschied zwischen dem Verlassen der Seite mit der Zurück-Taste oder auf andere Weise erkennen kann. An dieser Stelle möchte ich alle Tabs vergessen, die für diese Seite gespeichert waren.

+0

können Sie den Verlauf überprüfen, um festzustellen, ob die vorherige Seite mit Ihrer übereinstimmt? –

Antwort

4

Wenn Sie feststellen, dass ein Benutzer auf einen Link klickt und auf andere Weise von der Seite weg navigiert, können Sie einen Linkklick mit JavaScript erkennen, indem Sie jedem Link, den Sie beobachten möchten, onclick Eventhandler hinzufügen auf.

Wenn also onunload ausgelöst wird, ohne dass zuvor ein onclick ausgelöst wurde, verlässt der Benutzer die Seite auf andere Weise als durch Klicken auf einen Ihrer verfolgten Links.

<script type="text/javascript"> 
var links = document.getElementsByTagName('a'); 
for (var i = 0; i < links.length; i++) { 
    links[i].onclick = setGlobal; 
} 
function setGlobal() { 
    window.linkClicked = true; 
} 
window.onunload = function() { 
    if (typeof window.linkClicked === 'undefined' || !window.linkClicked) { 
     // they are leaving some other way than by clicking a link 
    } 
} 
</script> 

Es wird ein bisschen schwieriger, wenn Sie bereits onclick Ereignisse auf Ihrem <a> Tags, wenn das der Fall ist kann ich bieten eine Möglichkeit, das zu tun.

Natürlich können Sie auch an alle onclick Ereignisse mit jQuery oder einer anderen JavaScript-Bibliothek anfügen.

+0

Kreative Antwort, obwohl in meinem Fall unpraktisch. Wir haben nicht nur verschiedene Möglichkeiten, die Seite als Links zu verlassen (meistens onclicks, sondern auch submits), aber wir haben so viele Links, dass der Bug besser durch Refactoring des Tab-remembering-Codes gelöst werden könnte, als wenn man versucht, ein Flag einzufügen in alle Links auf der Seite. – Nicole

0

Browser erinnern den Status der Timer (setTimeout Aufrufe), die auf dieser Seite vorgenommen wurden.

Wenn die Seite zum ersten Mal geladen wird, wird onLoad aufgerufen. Stellen Sie einen Timer ein, der basierend auf dem Verlauf zur nächsten Seite weiterleitet. Wenn Sie bereits auf der letzten Seite sind, kein Problem: D, wenn nicht, dann wird es weitergeleitet werden.

Für IE wird der onLoad immer aufgerufen, egal ob mit der Zurück-Taste, daher können Sie dort den gleichen Code-Teil ablegen.