Autor Zpráva
janbarasek
Profil
Ahoj,
v prohlížeči Chrome jsem vypozoroval chybné chování cookies v JavaScriptu, v jiných prohlížečích se tento problém nevyskytuje.
Mějme následující živou ukázku (zjednodušenou):

<!doctype HTML5>
<html>
    <head>
        <title>Živá ukázka - chybné chování cookies v Chrome</title>
        <meta charset="UTF-8">
    </head>
    <body>
<script type="text/javascript" >
function set_cookies (names, values) {
    document.cookie=names+'='+values;
    return 0;
}
function get_cookies (cook_name) {
    var set_cookies = new Array, search_cookies = new Array;
    set_cookies = document.cookie.split("; ");
    for (i in set_cookies) {
        search_cookies = set_cookies[i].split("=");
        if (search_cookies[0] == cook_name) return search_cookies[1];
    }
}

set_cookies('test', 10); // definice nové cookies
document.write(get_cookies('test')); // vypsání hodnoty cookies
</script>
    </body>
</html>

Účel testovacího scriptu je vytvoření nové cookies s názvem "test", která bude obsahovat číselnou hodnotu "10". Funguje to, jenom v Chromu to vypisuje hlášku "undefined".

Nějaké návrhy, jak toto řešit?
Fisir
Profil
Reaguji na janbaraska:
Chrome nepoužívám, takže mám trochu zastaralejší verzi (34.0.1797.2), ale funguje to. Jenom jsem zrušil všechny tagy (kromě <script>), včetně doctype. Nevím, možná mu vadí ta přílišná nakloněnost <!doctype HTML5>.
janbarasek
Profil
Fisir:
Mám verzi 34.0.1847.116 Ubuntu 14.04 aura (260972) (tvrdí nastavení).
Co se týče toho doctype, tak věřím, že na chování nemá nejmenší vliv, protože v ostatních prohlížečích vše funguje. Zajímavé také je, že funkce "zkontrolovat prvek" neukazuje žádnou chybovou hlášku. Jindy totiž v případě nedefinnované proměnné vždy ukazuje místo, kde k chybě došlo.

Existuje nějaký online nástroj na odhalování podobných chyb? Nějaký validátor? Docela bych potřeboval, aby bylo vše funkční, protože řešení běžící jen někde není dle mého názoru řešení - protože existuje minimálně jeden další člověk, komu to také nemusí fungovat.
_es
Profil
janbarasek [#1]:
<!doctype HTML5> má asi rovnaký efekt ako by tam žiadna taká značka nebola, teda prepnutie prehliadača do „Quirk módu“ ( Módy prohlížečů). Na fungovanie cookies to asi vplyv nemá.
Chamurappi
Profil
Reaguji na janbaraska:
Jindy totiž v případě nedefinnované proměnné vždy ukazuje místo, kde k chybě došlo.
Tady nejde o nedefinovanou proměnnou. Funkce vrací undefined, protože nedošlo k returnu na řádku 18 (a undefined je výchozí návratová hodnota).
Zkoumal jsi, proč přesně dostáváš undefined? Tedy ve kterém kroku je problém? Zkus si třeba vypsat alertem document.cookie, abys viděl, jak vypadá celý řetězec, který get_cookies zpracovává.

Živá ukázka
Dovolím si podotknout, že tato ukázka moc živá není.
Spouštíš tu stránku přes HTTP protokol? Cookies nemusí správně fungovat na file:///.

protože řešení běžící jen někde není dle mého názoru řešení
To je chvályhodný přístup.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: