Heim Web-Frontend js-Tutorial JavaScript wird nicht aktualisiert, um die Vorwärts- und Rückwärtsfunktionen des Browsers zu implementieren. Javascript-Fähigkeiten

JavaScript wird nicht aktualisiert, um die Vorwärts- und Rückwärtsfunktionen des Browsers zu implementieren. Javascript-Fähigkeiten

May 16, 2016 pm 04:32 PM
javascript 浏览器

Um Backbone zu verstehen, müssen Sie zuerst Spa verstehen. Um Spa zu verstehen, müssen Sie zunächst verstehen, wie Single-Page-Anwendungen die URL ändern können, ohne die Seite zu aktualisieren.

Im Vergleich zum Springen zu verschiedenen Seiten hat AJAX das Surferlebnis des Benutzers erheblich verbessert. Es ist sehr angenehm, den weißen Bildschirm zwischen dem Seitenwechsel nicht sehen zu müssen. Allerdings unterstützten viele frühe AJAX-Anwendungen die Vorwärts- und Rückwärtsfunktionen des Browsers nicht. Dies führte dazu, dass der Benutzer unabhängig davon, wo er auf der Website navigierte, nach der Aktualisierung sofort zur ursprünglichen Position zurückkehrte und der Benutzer die Funktionen des Browsers nicht verwenden konnte Vorwärts- und Rückwärts-Taste zum Wechseln des Browserverlaufs.

Das erste Problem lässt sich relativ einfach lösen. Verwenden Sie einfach Cookies oder localStorage, um den Status der Anwendung aufzuzeichnen, lesen Sie diesen Status beim Aktualisieren der Seite und senden Sie dann die entsprechende Ajax-Anfrage, um die Seite zu ändern. Aber das zweite Problem ist sehr problematisch. Lassen Sie uns zunächst über die Lösung moderner Browser sprechen.

HTML5-Lösung

Um zu verstehen, wie HTML5 vorwärts und rückwärts implementiert, müssen Sie zunächst das Verlaufsobjekt und das Standortobjekt verstehen.

Historienobjekt

Verlaufsobjekteigenschaften

1.length: Gibt die Anzahl der URLs in der Browser-Verlaufsliste zurück. Jedes Mal, wenn der Benutzer eine Seite im aktuellen Tab besucht, wird diese Zahl um 1 erhöht. Aus Datenschutzgründen ist der konkrete Inhalt der URL nicht sichtbar.
2.state: Objekt im Zusammenhang mit der aktuellen URL, das nur über pushState und replaceState hinzugefügt oder geändert werden kann. Wir können es verwenden, um Informationen im Zusammenhang mit der URL zu speichern.

History-Objekt-Methode

1.history.back()

Diese Methode hat keine Parameter. Wenn sie ausgelöst wird, kehrt sie zur zuvor durchsuchten Seite zurück, was dem Klicken auf die Zurück-Schaltfläche des Browsers entspricht.

2.history.forward()

Diese Methode hat keine Parameter. Wenn sie ausgelöst wird, kehrt sie zu der Seite zurück, die Sie durchsucht haben, bevor Sie zurückgehen, was dem Klicken auf die Vorwärtsschaltfläche des Browsers entspricht.

3.history.go(number)

Diese Methode akzeptiert einen ganzzahligen Variablenparameter. „history.go(-1)“ entspricht dem Zurückblättern um eine Seite, „history.go(1)“ entspricht dem Vorblättern um eine Seite und „history.go(0)“ aktualisiert die aktuelle Seite.

4.history.pushState(state, title, url)

Der Schlüssel zum Ändern der URL ohne Aktualisierung der Seite ist folgender: Diese Methode ändert die location.href der aktuellen Seite und ändert das aktuelle Objekt „history.state“. Nach der Ausführung wird „history.length“ um 1 erhöht. Diese Methode akzeptiert drei Parameter:

1.state: Objekt im Zusammenhang mit der aktuellen URL.
2.title: Der Seitentitel, aber alle Browser ignorieren ihn. Um den Titel zu ändern, müssen Sie weiterhin document.title verwenden.
3.url: Eine URL in derselben Domäne wie die aktuelle Seite, location.href wird zu diesem Wert.

5.history.replaceState(state, title, url)

Diese Methode ist die gleiche wie oben, ändert jedoch nicht die Datei „history.length“, sondern nur „history.state“ und „location.href“.

Beachten Sie, dass der dritte Parameter von pushState und replaceState nicht domänenübergreifend sein kann und das Popstate-Ereignis und das Onhashchange-Ereignis des Browsers nicht auslöst (getestet unter chrome33).

Standortobjekt

Zusätzlich zum Klicken auf die Vor-/Zurück-Schaltfläche und zum Verlauf des Ereignisses können Sie die URL auch über die Standortmethode ändern und die Standorteigenschaften ändern:

Attribute des Standortobjekts (Lesen und Schreiben):

1.Host: Portnummer des Domänennamens
2.Hostname: Domänenname
3.Port: Portnummer
4.Protokoll: Protokoll
5.href: vollständiger Pfad
6. Herkunft: Port des Protokolldomänennamens
7.Hash: URL(Hash), beginnend mit einem Nummernzeichen (#)
8.Pfadname: Dokumentpfad-Dokumentname
9.Suche:Der Inhalt nach (?)

Sie können den Zweck der Nichtaktualisierung erreichen, indem Sie location.href oder location.hash ändern.

Methoden des Standortobjekts:

1. Zuweisen: Ändern Sie den Wert der URL und fügen Sie die aktuelle URL zum Verlauf hinzu. Die Länge von „history.length“ wird um 1 erhöht. location.asig(‘#’ x) ändert die URL, aktualisiert aber nicht die Seite.
2. Neu laden: Aktualisieren Sie die Seite.
3. Ersetzen: Ändern Sie den Wert der URL, aber History.length bleibt unverändert. Die Verwendungsmethode ist dieselbe wie bei der Zuweisung.

Popstate-Event

Wenn sich die URL ändert, klickt der Benutzer beispielsweise auf die Schaltfläche „Vorwärts/Zurück“, „history.go(n)“ (n ist nicht gleich 0), „location.hash = x“ (x ist nicht gleich dem aktuellen Standort). Hash) wird dieses Ereignis auslösen. Sie können damit URLs überwachen, um verschiedene Funktionen zu implementieren.

Code kopieren Der Code lautet wie folgt:

​ window.onpopstate = function(){
             //etwas tun
}

événement onhashchange

La modification de la valeur de hachage déclenchera l'événement popstate, mais le déclenchement de l'événement popstate ne déclenchera pas nécessairement l'événement onhashchange. Testé :

1.hash change mais location.pathname reste inchangé déclenchera l'événement onhashchange, tel que history.pushState(", ", '#abc');
2. Il ne se déclenchera pas si le hachage et l'emplacement.pathname sont modifiés ensemble, comme history.pushState(", ", 'a#abc');

Comment écrire dans les anciens navigateurs

Les anciens navigateurs ne prennent pas non plus en charge pushState et replaceState, donc surveiller les modifications d'URL via popstate (en fait, cette méthode n'est pas prise en charge) n'est pas réalisable. Ensuite, vous ne pouvez obtenir aucune actualisation en modifiant le contenu après l'url#, mais ils ne prennent pas en charge onhashchange, ils sont donc indifférents aux changements dans l'url (sauf que la page défilera jusqu'à la position correspondant à l'identifiant de la page). Ensuite, vous ne pouvez recourir qu'à la grande astuce : interroger, définir un setInterval pour surveiller la valeur de l'url. Comme ça :

Copier le code Le code est le suivant :

var prevHash = window.location.hash
var rappel = fonction(){...}
window.setInterval(function() {
Si (window.location.hash != prevHash) {
         prevHash = window.location.hash
        rappel(prevHash);
}
}, 100);

Bien sûr, écrire de cette façon est très frustrant. Si vous n'envisagez pas de cliquer sur la balise a avec un identifiant sur la page pour modifier le hachage, vous pouvez utiliser des modèles de conception pour implémenter avec élégance les URL de surveillance. Par exemple, dans le modèle d'observateur classique, une classe est spécifiquement utilisée pour implémenter la fonction de modification du hachage, puis toutes les classes (observateurs) qui souhaitent surveiller les modifications d'URL s'abonnent à cette classe (observée).

Copier le code Le code est le suivant :

//Changer la classe de l'url
fonction UrlChanger() {
var _this = ceci;
This.observers = [];
//Ajouter un observateur
This.addObserver = function(obj) {...}
//Supprimer l'observateur
This.deleteObserver = function(obj) {...}
//Avertir les observateurs
This._notifyObservers = function() {
      var longueur = _this.observers.length;
console.log(longueur)
pour(var je = 0; je < longueur; je ) {
​​​​​​ _this.observers[i].update();
>
>
//Changer l'url
This.changeUrl = fonction (hachage) {
           window.location.hash = hash;
_this._notifyObservers();
>
>
//Cours d'écoute
fonction oneOfObservers() {
var _this = ceci;
This.update = function() {...}
>
//Mise en œuvre
var o1 = nouveau UrlChanger();
var o2 = new oneOfObservers();
o1.addObserver(o2);
o1.changeUrl('fun/arg1/arg2/');
//o2 a fait quelque chose...
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was ist Apache Server? Wofür ist Apache Server? Was ist Apache Server? Wofür ist Apache Server? Apr 13, 2025 am 11:57 AM

Apache Server ist eine leistungsstarke Webserver -Software, die als Brücke zwischen Browsern und Website -Servern fungiert. 1. Es werden HTTP -Anforderungen behandelt und Webseiteninhalte basierend auf Anfragen zurückgegeben. 2. Modulares Design ermöglicht erweiterte Funktionen, wie die Unterstützung für die SSL -Verschlüsselung und dynamische Webseiten. 3. Konfigurationsdateien (z. B. virtuelle Host-Konfigurationen) müssen sorgfältig eingestellt werden, um Sicherheitsanfälligkeiten zu vermeiden und Leistungsparameter wie Thread-Zähler und Zeitüberschreitungszeit zu optimieren, um leistungsstarke und sichere Webanwendungen zu erstellen.

Tipps zur Verwendung von HDFS -Dateisystem auf CentOS Tipps zur Verwendung von HDFS -Dateisystem auf CentOS Apr 14, 2025 pm 07:30 PM

Das Installations-, Konfigurations- und Optimierungshandbuch für das HDFS -Dateisystem unter CentOS -System In diesem Artikel wird die Installation, Konfiguration und Optimierung von Hadoop Distributed Dateisystem (HDFS) auf CentOS -System geleitet. HDFS -Installation und Konfiguration Java -Umgebung Installation: Stellen Sie zunächst sicher, dass die entsprechende Java -Umgebung installiert ist. Bearbeiten/etc/Profildatei, Folgendes hinzufügen und /usr/lib/java-1.8.0/jdk1.8.0_144 mit Ihrem tatsächlichen Java-Installationspfad: exportjava_home =/usr/lib/java-1.8.0/jdk1.8.0_144144141441444 = $ java-1.8.0/Jdk1.8.0_144444 = $ Java-1. Java-1 $ Java-1.8.8.0_14444, ersetzen

Lösen Lösen Apr 18, 2025 am 09:24 AM

Bei der Entwicklung von Websites mit CraftCMS stoßen Sie häufig mit Ressourcendateiproblemen, insbesondere wenn Sie häufig CSS und JavaScript -Dateien aktualisieren, alte Versionen von Dateien möglicherweise weiterhin vom Browser zwischengespeichert. Dieses Problem wirkt sich nicht nur auf die Benutzererfahrung aus, sondern erhöht auch die Schwierigkeit der Entwicklung und des Debuggens. Kürzlich habe ich in meinem Projekt ähnliche Probleme gestoßen, und nach einigen Erkundungen fand ich das Plugin Wiejeben/Craft-Laravel-Mix, das mein Caching-Problem perfekt löste.

NGINX -Leistungsüberwachung und Fehlerbehebungstools NGINX -Leistungsüberwachung und Fehlerbehebungstools Apr 13, 2025 pm 10:00 PM

Die Überwachung und Fehlerbehebung von Nginx-Leistungen werden hauptsächlich in den folgenden Schritten durchgeführt: 1. Verwenden Sie Nginx-V, um Versionsinformationen anzuzeigen und das Modul von stub_status zu aktivieren, um die Anzahl der aktiven Verbindungen, Anforderungen und Cache-Trefferzahlen zu überwachen. 2. Verwenden Sie den Top -Befehl, um den Aufbau von Systemressourcen, Iostat und VMSTAT -Monitor -Disk -I/A bzw. Speicherverbrauch zu überwachen. 3.. Verwenden Sie TCPDump, um Pakete zu erfassen, um den Netzwerkverkehr zu analysieren und Probleme mit der Netzwerkverbindung zu beheben. 4. Konfigurieren Sie die Anzahl der Arbeitsprozesse ordnungsgemäß, um unzureichende gleichzeitige Verarbeitungsfunktionen oder übermäßige Prozesskontextschaltaufwand zu vermeiden. 5. Konfigurieren Sie den Nginx -Cache korrekt, um unsachgemäße Einstellungen für die Größengröße zu vermeiden. 6. Durch Analyse von Nginx -Protokollen, z. B. die Verwendung von awk- und grep -Befehlen oder Elch

So konfigurieren Sie den HTTPS -Server in Debian OpenSSL So konfigurieren Sie den HTTPS -Server in Debian OpenSSL Apr 13, 2025 am 11:03 AM

Das Konfigurieren eines HTTPS -Servers auf einem Debian -System umfasst mehrere Schritte, einschließlich der Installation der erforderlichen Software, der Generierung eines SSL -Zertifikats und der Konfiguration eines Webservers (z. B. Apache oder NGINX) für die Verwendung eines SSL -Zertifikats. Hier ist eine grundlegende Anleitung unter der Annahme, dass Sie einen Apacheweb -Server verwenden. 1. Installieren Sie zuerst die erforderliche Software, stellen Sie sicher, dass Ihr System auf dem neuesten Stand ist, und installieren Sie Apache und OpenSSL: sudoaptupdatesudoaptupgradesudoaptinsta

So überwachen Sie den HDFS -Status auf CentOs So überwachen Sie den HDFS -Status auf CentOs Apr 14, 2025 pm 07:33 PM

Es gibt viele Möglichkeiten, den Status von HDFs (Hadoop Distributed Dateisystem) auf CentOS -Systemen zu überwachen. In diesem Artikel werden mehrere häufig verwendete Methoden eingeführt, mit denen Sie die am besten geeignete Lösung auswählen können. 1. Verwenden Sie Hadoops eigenes Webui, Hadoops eigene Weboberfläche, um die Überwachungsfunktion der Cluster -Status zu ermöglichen. Schritte: Stellen Sie sicher, dass der Hadoop -Cluster in Betrieb ist. Greifen Sie in Ihrem Browser auf das Webui zu: Geben Sie http: //: 50070 (Hadoop2.x) oder http: //: 9870 (Hadoop3.x) ein. Der Standard -Benutzername und das Passwort sind normalerweise HDFS/HDFs. 2. Die Überwachung des Befehlszeilenwerkzeugs Hadoop bietet eine Reihe von Befehlszeilen -Tools, um die Überwachung zu erleichtern

Installation und Schnellkonfigurationshandbuch für NGINX -Server Installation und Schnellkonfigurationshandbuch für NGINX -Server Apr 13, 2025 pm 10:18 PM

In diesem Artikel werden die Konstruktions- und Konfigurationsmethoden von Nginx eingeführt. 1. Installieren Sie Nginx: Verwenden Sie Sudoyumininstallnginx auf CentOS, verwenden Sie Sudoapt-Getinstallnginx auf Ubuntu und beginnen Sie mit dem SudosystemCTLStartNginx nach der Installation. 2. Grundlegende Konfiguration: Ändern Sie die Datei /etc/nginx/nginx.conf, ändern Sie hauptsächlich die Anweisungen zum Hören (Port) und Root (Site Root Directory) im Serverblock und verwenden Sie nach der Änderung sudosystemctlrestartNginx, um neu zu starten und wirksam zu werden. 3.. Virtuelle Hostkonfiguration: In nginx.co

So sehen Sie den Thread -Status im Tomcat -Protokoll an So sehen Sie den Thread -Status im Tomcat -Protokoll an Apr 13, 2025 am 08:36 AM

Um den Thread -Status im Tomcat -Protokoll anzuzeigen, können Sie die folgenden Methoden verwenden: TomcatmanagerWEB -Schnittstelle: Geben Sie die Verwaltungsadresse von Tomcat (normalerweise http: // localhost: 8080/Manager) in den Browser -Browser an, und Sie können den Status des Thread -Pools nach der Logging in. Tomcat's Thread Pool. Wählen Sie in JConsole

See all articles