2017-06-21 3 views
1

Gibt es einen Browserspeicher, der nur von der Seite verwendet werden kann, auf der er erstellt wurde?Browser Tab Speicher?

Ich mache ein TamperMonkey-Skript, um meine Arbeit zu automatisieren. Es wird ausgelöst, wenn eine Seite aus einer bestimmten Domäne geöffnet wird. Es würde dann einen bestimmten Link (dieselbe Domain) in der genannten Seite finden und es in derselben Registerkarte öffnen. Wenn die neu geöffnete Seite einer Bedingung entspricht, würde sie auf die vorherige Seite zurückgehen (um manuell überprüft zu werden). Wenn nicht, würde es sich selbst schließen.

Ich habe localStorage verwendet, um zu markieren, ob eine Seite versucht hat, diese Überprüfung durchzuführen. Andernfalls würde das Skript die Verknüpfung erneut öffnen, wenn die Originalseite geladen und in einer Schleife gefangen ist.

Das Skript läuft reibungslos, wenn nur eine einzige Registerkarte ausgeführt wird. Aber es scheitert oft, wenn ich mehrere Tabs (alle in der gleichen Domäne) ausführen. Ich nehme an, dass jede Registerkarte auf die gleiche localStorage zugreifen konnte, wodurch die Loop-Prüfung gestört wurde. Ich habe trotzdem nicht gefunden, dass ich jedem LocalStorage einer Registerkarte einen eindeutigen Namen über das gleiche Skript gebe.

Als solche, ich brauche einen Browser-Speicher, der von einem Tab verwendet werden konnte, auch nachdem es eine neue URL in der gleichen Domäne geöffnet, aber nicht von einem anderen Tab mit derselben Domain verwendbar.

+0

Suchen Sie nach so etwas wie [ 'sessionStorage'] (https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage) ? – Kaiido

+0

Ich habe den Eindruck, dass sessionStorage einfach localStorage ist, das gelöscht wurde, nachdem eine Sitzung vorbei ist. Gibt es einen anderen Unterschied zwischen den beiden? –

+0

gut für Ihren Fall, ja. Sitzungen werden nur zwischen dem Hauptfenster und den von ihm geöffneten Fenstern geteilt. – Kaiido

Antwort

2

Sie können Window.sessionStorage für diesen Zweck verwenden.

Beispiel

// Store in `name` in the current tab 
 

 
sessionStorage.setItem('name', 'Some Name'); 
 

 
// Get `name` from sessionStorage 
 

 
var name = sessionStorage.getItem('name'); 
 

 

 
alert(name); // Some Name

Nach MDN:

Die session Eigenschaft ermöglicht es Ihnen, eine Session Storage-Objekt für den aktuellen Ursprung zuzugreifen. sessionStorage ähnelt Window.localStorage. Der einzige Unterschied besteht darin, dass Daten, die in localStorage gespeichert sind, kein Ablaufdatum haben. Die in sessionStorage gespeicherten Daten werden gelöscht, wenn die Seitensitzung beendet wird. Eine Seitensitzung dauert so lange, wie der Browser geöffnet ist und über Seiten neu geladen und wiederhergestellt wird. Das Öffnen einer Seite in einer neuen Registerkarte oder einem neuen Fenster bewirkt, dass eine neue Sitzung initiiert wird, die sich von der Funktionsweise der Sitzungscookies unterscheidet.

Source

+0

Was passiert, wenn mehrere Register gleichzeitig das Skript ausführen? Mein Skript schlägt fehl, wenn es unter dieser Bedingung ausgeführt wird. Ich vermute, entweder weil a) eine neu geöffnete Registerkarte Zugang zu localStorage einer anderen Registerkarte hat und diese geändert hat oder b) die localStorage wird immer dann gelöscht, wenn eine neue Registerkarte geöffnet wird. Alle diese Registerkarten stammen aus der gleichen Domäne und führen dasselbe Skript aus, wodurch localStorage mit demselben Namen erstellt und geändert wird. –

+0

@RayArifin Es gibt einen Unterschied zwischen 'localStorage' und' sessionStorage' Wenn Sie 'sessionStorage' verwenden, dann ist es kein Problem, wenn der Benutzer zwei Registerkarten öffnet. Jeder Tab hat sein eigenes 'sessionStorage'. –

Verwandte Themen