2016-08-23 2 views
0

Ich verwende gerade EnjoyHint.js auf meiner Website (es ist im Grunde für Website-Komplettlösungen/Touren). Die .js-Datei, die die Tour initialisiert, wird jedes Mal ausgeführt, wenn ich die Seite neu lade. Das bedeutet, dass die Tour auch dann angezeigt wird, wenn Sie sie bereits beim erneuten Laden der Seite oder beim zweiten Besuch gesehen haben. Ich bin mir nicht sicher, wie ich das verhindern kann. Ich möchte nur, dass das .js-Skript einmal ausgeführt wird und nicht erneut ausgeführt wird, wenn der Benutzer die Seite erneut lädt oder besucht.Erinnerung, wenn Javascript zuvor ausgeführt wurde und es nicht erneut ausgeführt wurde, wenn es [EnjoyHint.js] war

Ist es möglich, sich daran zu erinnern, ob die .js-Datei zuvor auf dem Computer ausgeführt wurde und nicht erneut ausgeführt wurde, wenn dies der Fall war. Wenn jemand die Website besucht, möchte ich nicht, dass die Website-Tour weiterhin erscheint, wenn sie sie schon einmal gesehen hat.

Danke!

+3

Was Plätzchen? :) – Maju

+0

Können Sie den endgültigen Code eingeben, damit ich es überprüfen kann? Ich versuche das zu verwenden, aber ich weiß nicht, wo ich den Code der Antwort einfügen soll. Ich habe es im onStart des neuen EnjoyHint versucht, aber es funktioniert nicht, wenn ich nicht enjoyhint_instance.run(); außerhalb des Konstruktors – Patrick

Antwort

1

Die Verwendung von Cookies ist für diese Art von Aufgabe üblich. Es gibt plenty of libraries sie auf einfache Art und Weise zu verwenden, aber dafür brauchen Sie nicht wirklich ein:

// If the cookie is not set to 1 
if(document.cookie.indexOf('tourIsDone=1') < 0){ 
    //Launch the tour 
    launchTour(); 
    // Set the cookie (you can also do it once the tour is finished) 
    document.cookie = "tourIsDone=1"; 
} 

Erklärung, da document.cookie verwirrend sein kann

Wenn document.cookie lesen, erhalten Sie eine lange String jedes Cookie enthält:

cookie1=value1;cookie2=value2 

Überprüfung auf document.cookie.indexOf(nameOfCookie) < 0 wird sicherstellen, dass es nicht drin.

Um jedoch ein einzelnes Cookie zu setzen, ohne die anderen zu ändern, müssen Sie genau das tun:

document.cookie = "newCookie=newValue"; 
+1

Hey, vergib mir, wenn ich falsch verstehe. Also erstelle ich zuerst einen Cookie und setze den Wert auf 0: 'document.cookie =" tourIsDone = 0 ";' Dann mache ich deine if-Anweisung, um zu prüfen, ob der Cookie den Wert 0 hat. Wenn dies der Fall ist, startet er die Tour und setzt den Wert des Cookies auf 1. Was macht 'indexOf'? – Tahmid

+2

@Tahmid Initialisiere es nicht auf 0, denn wenn es vorher auf 1 gesetzt wurde, wird es zurückgesetzt und startet die Tour jedes Mal. Der Code, den ich in meine Antwort geschrieben habe, ist alles was du brauchst. 'Document.cookie =" tourIsDone = 0 ";' wäre nur nützlich, wenn der Browser "vergessen" sollte, dass die Tour jemals gemacht wurde (gut zum Testen). [indexOf()] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/String/indexOf) sucht nach einem String in einem anderen String. Wenn es gefunden wird, gibt es seinen Index zurück. Wenn nicht, gibt es '-1' zurück, was kleiner als 0 ist (Daher die 'if'-Bedingung' indexOf (...) <0') – blex

+1

Ich sehe, ich habe deinen Code kopiert und aus irgendeinem Grund tut es das nicht Es funktioniert nicht, es zeigt immer noch die Tour an, wenn die Seite neu geladen wird. Ich habe 'launchTour();' durch 'enjoyhint_instance.run() ersetzt;' – Tahmid

0

Es gibt zwei Möglichkeiten:

  • Cookies
    schwieriger zu bedienen, überall funktioniert.
  • Local Storage
    Einfacher zu verwenden, funktioniert möglicherweise nicht auf sehr alten Browsern. Kompatibilitätsblatt here.
Verwandte Themen