Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit März 2022 browserübergreifend verfügbar.
Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.
Hinweis: Diese Funktion ist in Web Workers verfügbar.
Die Web Locks API ermöglicht Skripten, die in einem Tab oder Worker ausgeführt werden, asynchron eine Sperre zu erwerben, sie zu halten, während Arbeiten ausgeführt werden, und sie dann freizugeben. Solange die Sperre gehalten wird, kann kein anderes Skript im selben Ursprung die gleiche Sperre erwerben, was es einer Webanwendung ermöglicht, die in mehreren Tabs oder Workern ausgeführt wird, die Arbeit und die Nutzung von Ressourcen zu koordinieren.
Eine Sperre ist ein abstraktes Konzept, das eine potenziell geteilte Ressource darstellt, die durch einen vom Webanwendung gewählten Namen identifiziert wird. Zum Beispiel, wenn eine Webanwendung, die in mehreren Tabs läuft, sicherstellen möchte, dass nur ein Tab Daten zwischen dem Netzwerk und Indexed DB synchronisiert, könnte jeder Tab versuchen, eine "my_net_db_sync"-Sperre zu erwerben, aber nur ein Tab wird erfolgreich sein (das Leader-Wahl-Muster.)
Die API wird wie folgt verwendet:
Während eine Sperre gehalten wird, werden Anfragen für dieselbe Sperre von diesem Ausführungskontext oder von anderen Tabs/Workern in die Warteschlange gestellt. Die erste Anfrage in der Warteschlange wird nur gewährt, wenn die Sperre freigegeben wird.
Die API bietet optionale Funktionalität, die bei Bedarf verwendet werden kann, einschließlich:
Sperren sind auf Ursprünge beschränkt; die von einem Tab unter https://example.com erworbenen Sperren haben keinen Einfluss auf die von einem Tab unter https://example.org:8080 erworbenen Sperren, da sie unterschiedliche Ursprünge sind.
Der Haupteinstiegspunkt ist navigator.locks.request(), der eine Sperre anfordert. Es nimmt einen Sperrnamen, eine optionale Menge von Optionen und einen Rückruf an. Der Rückruf wird aufgerufen, wenn die Sperre gewährt wird. Die Sperre wird automatisch freigegeben, wenn der Rückruf zurückkehrt, daher ist der Rückruf normalerweise eine async function, die bewirkt, dass die Sperre erst freigegeben wird, wenn die asynchrone Funktion vollständig beendet ist.
Die request()-Methode selbst gibt ein Promise zurück, welches sich auflöst, sobald die Sperre freigegeben wurde; innerhalb einer async Funktion kann ein Skript das Aufrufen mit await warten lassen, um den asynchronen Code linear auszuführen. Zum Beispiel:
Mehrere Optionen können beim Anfordern einer Sperre übergeben werden:
Die Methode navigator.locks.query() kann von Skripten verwendet werden, um den Zustand des Sperrmanagers für den Ursprung zu introspektieren. Dies kann beim Debuggen nützlich sein, z.B. um zu identifizieren, warum eine Sperre nicht erworben werden konnte. Die Ergebnisse sind ein Schnappschuss des Sperrmanager-Zustands, der gehaltene und angeforderte Sperren sowie einige zusätzliche Daten (z.B. Modus) über jede zum Zeitpunkt der Aufnahme des Schnappschusses identifiziert.
Für kompliziertere Fälle, wie das Halten der Sperre für eine willkürlich lange Zeit, kann der Rückruf ein Promise explizit auflösen, das vom Skript aufgerufen wird:
Ein Deadlock tritt auf, wenn ein Prozess nicht mehr weiterarbeiten kann, weil jeder Teil auf eine Anfrage wartet, die nicht erfüllt werden kann. Dies kann bei dieser API in komplexen Anwendungsfällen auftreten, z.B. wenn mehrere Sperren in der falschen Reihenfolge angefordert werden. Wenn Tab 1 Sperre A hält und Tab 2 Sperre B hält, dann versucht Tab 1 auch Sperre B zu erwerben und Tab 2 versucht auch Sperre A zu erwerben, kann keine der Anfragen gewährt werden. Webanwendungen können dies durch verschiedene Strategien vermeiden, wie z.B. sicherzustellen, dass Sperranforderungen nicht verschachtelt sind, oder immer gut geordnet oder mit Zeitüberschreitungen versehen sind. Beachten Sie, dass solche Deadlocks nur die Sperren selbst und den von ihnen abhängigen Code betreffen; der Browser, andere Tabs und andere Skripte auf der Seite sind nicht betroffen.
Bietet den Namen und den Modus einer zuvor angeforderten Sperre, die im Rückruf an LockManager.request() empfangen wird.
LockManagerBietet Methoden zum Anfordern eines neuen Lock-Objekts und zum Abfragen eines vorhandenen Lock-Objekts. Um eine Instanz von LockManager zu erhalten, rufen Sie navigator.locks auf.
Gibt ein LockManager-Objekt zurück, das Methoden zum Anfordern eines neuen Lock-Objekts und zum Abfragen eines vorhandenen Lock-Objekts bietet.
WorkerNavigator.locks SchreibgeschütztGibt ein LockManager-Objekt zurück, welches Methoden bietet, um ein neues Lock-Objekt anzufordern und ein vorhandenes Lock-Objekt abzufragen.
| Web Locks API |
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
Der Bauplan für ein besseres Internet.
Besuche die gemeinnützige Muttergesellschaft der Mozilla Corporation, die Mozilla Foundation.
Teile dieses Inhalts sind ©1998–2026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfügbar unter einer Creative-Commons-Lizenz.