2017-05-23 2 views
0

Ich habe bereits nach der Antwort gesucht, aber scheint, kann ich die Antwort nicht finden. Mein Plan ist, nach dem Hinzufügen von Cookies eine Warnung anzuzeigen.Javascript - Machen Sie etwas auf Cookie hinzufügen

Ich habe gesetzt Cookie existiert nach 5 Sekunden mit setTimeout.

Script

setTimeout(
    function(){ 
     document.cookie = "username=Billy Joe"; 
    }, 5000); 


mein Ansatz ist ich diesen Code verwenden, um zu überprüfen, ob das Cookie vorhanden ist oder nicht.

if(!getCookie("username")){ 
    alert("Cookie doesn't exists"); 
}else{ 
    alert("Cookie exists"); 
} 


Aber schauen ist wie nur auf der ersten Last prüfen ist, nicht nach dem Cookie auf Add.
Meine Frage ist, wie die Warnung angezeigt wird, nachdem Cookie hinzugefügt wurde?
Vielen Dank

+0

Sie müssen genauer in Ihrer Frage sein. Wenn Sie den Cookie setzen, wissen Sie bereits, dass Ihr Cookie gesetzt ist. Für mich macht es also keinen Sinn, nachträglich einen Check innerhalb der setTimeout-Funktion hinzuzufügen. Wenn Sie eine Parallelität haben möchten, z.B., dass Sie unabhängig prüfen, ob Ihr Cookie gesetzt ist, ich empfehle, Ereignisse zu verwenden oder verspricht, asynchrone Aufrufe zu behandeln. – Guybrush

+0

@Guybrush Vielen Dank für Ihren Vorschlag. Beim nächsten Mal werde ich präziser eine Frage stellen. Und ja, wahr, es macht keinen Sinn, den Cookie innerhalb des Timeouts zu überprüfen, weil ich immer darin checken kann. Mein Cookie wird dynamisch aus der PHP-Datei hinzugefügt, so dass ich den Cookie außerhalb der Timeout-Funktion überprüfen möchte. Richtig, ich möchte es selbständig überprüfen, aber es scheint, als könnte ich die Antwort aus den Quellen, nach denen ich gesucht habe, nicht herausfinden. Können Sie einige Ereignisse freigeben, um asynchrone Anrufe unabhängig/außerhalb der Timeout-Funktion zu behandeln? Vielen Dank Guy! – Billy

Antwort

-1

Leider habe ich in diesem Zusammenhang eine falsche API gefunden, da diese API für die Mozilla-Web-Erweiterung gedacht war. Sei dir dessen bewusst. Die einzige Arbeitstechnik ist die Verwendung der setInterval-Funktion (vgl. https://www.experts-exchange.com/questions/22641766/Javascript-Call-function-as-soon-as-cookie-value-changes-Set-listener-for-changed-cookie-value.html). Allerdings würde ich es vorziehen, nicht in dieser Funktion das Cookie zu tun gesetzt, da es keinen Sinn macht;):

var handledCookie = false;  // Was the cookie already handled? 
var cookieCheckId = undefined; // The id of the checker 

var handleCookie = function() { 
    if (!getCookie("username")){ 
    alert("Cookie doesn't exists"); 
    } else { 
    clearInterval(cookieCheckId); // Unset the check 
    handledCookie = true;   // Set the cookie handled 
    alert("Cookie exists"); 
    } 
}; 

handleCookie(); 

if (!handledCookie) { 
    cookieCheckId = setInterval(handleCookie, 5000); // Handle the cookies 
} 

Also, wenn das Cookie innerhalb oder außerhalb Ihres Code erstellt wird, wird die handleCookie Funktion einmal aufgerufen werden . Die Überprüfung erfolgt alle 5 Sekunden. Wenn der Cookie gefunden wurde, wird die Überprüfung deaktiviert (clearInterval).

Falsch !!! antwort vor:

Sie können mit Ereignissen umgehen. Es gibt ein Ereignis, das ausgelöst wird, wenn sich ein Cookie ändert (vgl. https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/cookies/onChanged).

Zum Beispiel können Sie so etwas wie folgt verwenden:

browser.cookies.onChanged.addListener(function(changeInfo) { 
    if(!getCookie("username")){ 
    alert("Cookie doesn't exists"); 
    } else { 
    alert("Cookie exists"); 
    } 
}); 

Sie können auch auf die changeInfo einen Blick darauf werfen und diese Informationen benutzen, um Ihre Cookies zu identifizieren:

browser.cookies.onChanged.addListener(function(changeInfo) { 
    let cookie = JSON.stringify(changeInfo.cookie); 
    if (cookie.name === 'username') { 
    alert("Cookie exists"); 
    } 
}); 

jedoch Sie dann Überprüfen Sie nicht, ob Ihr Cookie nicht existiert.

+0

Hallo Guybrush! Vielen Dank für Ihre Antwort. Ich habe Ihren Code verwendet und leider habe ich folgende Fehlermeldung "TypeError: browser.cookies ist undefined" – Billy

+0

tut mir leid. Das scheint eine neue API zu sein und funktioniert nicht in allen Browsern. Ich sehe es für dich aus. – Guybrush

+0

Leider war die API für Web-Erweiterungen. Sie funktionieren also nicht auf normalen Websites. Allerdings habe ich meine Antwort korrigiert und jetzt sollte es funktionieren. Es gibt kein Ereignis oder etwas anderes, um mit Cookies umzugehen. – Guybrush

0

My question is how to show the alert after cookie has been added?

einfach nur tun, um Ihre Check, nachdem Sie das Cookie hinzugefügt haben!

function checkCookie() { 
    alert(getCookie("username") ? "Cookie exists!" : "Cookie doesn't exist!"); 
} 

setTimeout(function() { 
    document.cookie = "username=Billy Joe"; 
    checkCookie(); 
}, 5000); 
+0

Hallo Alex! Vielen Dank für Ihre Antwort. Ich schätze es sehr. Aber ich habe vergessen zu erwähnen, dass checkCookie() -Funktion außerhalb der Timeout sein muss, da der Cookie dynamisch von PHP erstellt wurde, nicht innerhalb des Timeouts. Wie kann ich das erreichen? Vielen Dank! – Billy

0

Grundsätzlich wird setTimeout immer asynchron ausgeführt, also wird im Prinzip Ihr ​​if-Block ausgeführt, bevor der Cookie-Wert gesetzt wird. Sie sollten die Funktion nach dem Hinzufügen von Cookies verwenden. Zum Beispiel ist Ihre Timeout-Funktion ausgeführt/gesetzt Cookie-Wert nach 5 Sekunden, aber Ihre Alter läuft sofort Lesen der SetTimeout-Code

Hier ist Beispiel ist sollte für Sie arbeiten.

function checkCookie(){ 
    if(!getCookie("username")){ 
     alert("Cookie doesn't exists"); 
    }else{ 
     alert("Cookie exists"); 
    } 
} 

// check before add 
checkCookie() 

setTimeout(function(){ 
    document.cookie = "username=Billy Joe"; 
    // check after add 
    checkCookie(); 
}, 5000); 
+0

Ich verstehe nicht, warum ich den Cookie überprüfen sollte, wenn es von mir selbst eingestellt ist innerhalb desselben Codes? – Guybrush

+0

können Sie die Funktion Bruder umbenennen. checkCookie, um Plätzchen zu ändern. –

+0

OK, es könnte Sinn machen, wenn die Funktion irgendwo innerhalb des Codes wiederverwendet wird und etwas nützliches von ihm getan wird. Jedoch in diesem Fall es wäre es besser, eine zusätzliche Funktion zu verwenden, um den 'wahren' Fall zu behandeln, oder? Und dann können Sie die Extra-Funktion direkt in' setTimeout' ausführen, richtig? – Guybrush

Verwandte Themen