Chrome, Safari et Cookies...

Le
unbewusst.sein
je teste un script concernat les cookies.
il marche nickel avec Chrome et Firefox, pas avec Safari.
il s'agit d'enregistrer un objet :
var datas={'cat': 2, 'limit': 18, 'offset': 0, 'rowid': 244};

dans un cookie.

Malheureusement Safari me dit (console web developer) qu'il n'y a pas de
cookie associé à ma page, donc je ne peux voir son contenu de cette
manière

Ce qui se passe :

quand je lit le cookie, Safari me retourne par :
console.log("readCookieObject() : object = "+object);

# -> readCookieObject() : object = { 'cat': 2

dons, à la suite de ce console.log j'ai un :
object = eval(" ( " + object + " ) ");

qui me donne, bien évidemment une erreur de syntaxe :
SyntaxError: Expected token '}'

Alors que ça marche très bien sur Chrome, Nightly et Opera

Je suspecte un problème avec une espace ou la virgule.

Le code est accessible ici :
<http://82.226.217.239/js_lib/tests/cookieObject_TEST.html>

Bon, le but de la manip est d'enregistrer l'état d'une fenêtre pour la
ré-ouvrir dans le même état

Peut-être n'est-ce pas le bon moyen en utilisant un cookie ?






--
« Si tous ceux qui n'ont rien n'en demandaient pas plus,
il serait bien facile de contenter tout le monde. »
(Coluche)
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
unbewusst.sein
Le #23885491
Une Bévue
Je suspecte un problème avec une espace ou la virgule.



Bon, j'ai progressé, dans la partie du script lisant le cookie, j'ai :
var ca = document.cookie.split(';');

si je fais un print des valeurs de ca par :
console.log("readCookie() : ca["+i+"] = "+ca[i]);

je n'en ai qu'une qui vaut :
readCookie() : ca[0] = org.ytho.landp.datas={ 'cat': 2

donc le problème est à l'écriture ou la lecture ???

si je fais :
console.log("readCookie() : document.cookie = "+document.cookie);

ça me retourne :
readCookie() : document.cookie = org.ytho.landp.datas={ 'cat': 2

donc ça ne vient pas de la fonction readCookie()

donc je regarde ce qu'enregistre createCookie() par :
console.log("createCookie() : document.cookie "+name+"="+value+expires+"; path=/");

étant entendu que c'est ce que je mets dans le cookie :
document.cookie = name+"="+value+expires+"; path=/";

et là, ça me donne une valeur qui me semble correcte :
createCookie() : document.cookie = org.ytho.landp.datas={ 'cat': 2,
'limit': 18, 'offset': 0, 'rowid': 244, 'sum': 264 }; expires=Fri, 19
Oct 2012 07:52:52 GMT; path=/

Seule hypothèse : Safari n'aime pas les "," de mon objet ???

--
« Si tous ceux qui n'ont rien n'en demandaient pas plus,
il serait bien facile de contenter tout le monde. »
(Coluche)
unbewusst.sein
Le #23885541
Une Bévue
Seule hypothèse : Safari n'aime pas les "," de mon objet ???



Apparemment, d'a^rès une recherche Google, "ça a eu été" un bugg connu"
Matt Neubourh renvoie à une page de faq sur safari, qui n'existe plus.
même aves l'application "Cocoa Cookie" je ne vois pas mon cookie,
peut-être est-ce du à mon adresse :
http://82.226.217.239/js_lib/tests/cookieObject_TEST.html
_______^^^^^^^^^^^^^^^___________________________________

????
qui est mon localhost ???


--
« Si tous ceux qui n'ont rien n'en demandaient pas plus,
il serait bien facile de contenter tout le monde. »
(Coluche)
unbewusst.sein
Le #23885581
Une Bévue
même aves l'application "Cocoa Cookie" je ne vois pas mon cookie,



Si je farfouille dans ~/Library/Cookies, je vois des fichiers :
com.apple.appstore.plist
com.apple.appstore.plist - corrupt
Cookies.binarycookies
Cookies.plist
Cookies.plist_tmp_217_0.dat

et ni dans Cookies.plist ni dans Cookies.plist_tmp_217_0.dat
il n'y a de trace de mon cookie, repéré par son nom
"org.ytho.landp.datas"

je ne sais pas lire les "Cookies.binarycookies"...

--
« Si tous ceux qui n'ont rien n'en demandaient pas plus,
il serait bien facile de contenter tout le monde. »
(Coluche)
Bol
Le #23886141
var datas={'cat': 2, 'limit': 18, 'offset': 0, 'rowid': 244};
dans un cookie.



encode les cookies comme les urls
var=escape(data)

A+
Bol
Pierre Goiffon
Le #23889501
Le 20/10/2011 12:28, Bol a écrit :
encode les cookies comme les urls
var=escape(data)



ATTENTION : encode() fonctionne en ISO Latin-1 ! Il vaut mieux utiliser
encodeURI() ou encodeURIComponent() !

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/encodeURI
Une Bévue
Le #23890581
Le 21/10/2011 12:15, Pierre Goiffon a écrit :
ATTENTION : encode() fonctionne en ISO Latin-1 ! Il vaut mieux utiliser
encodeURI() ou encodeURIComponent() !

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/encodeURI




Okidoki, merci beaucoup, je n'utilise QUE UTF-8...
SAM
Le #23898621
Le 20/10/11 09:28, Une Bévue a écrit :
je teste un script concernat les cookies.
il marche nickel avec Chrome et Firefox, pas avec Safari.
il s'agit d'enregistrer un objet :
var datas={'cat': 2, 'limit': 18, 'offset': 0, 'rowid': 244};



donc le cookie contiendra :
"datas={'cat': 2, 'limit': 18, 'offset': 0, 'rowid': 244}"
j'imagine ?
ou même, simplement :
"{'cat': 2, 'limit': 18, 'offset': 0, 'rowid': 244}"
qu'à la relecture on analysera par :
var datas = eval(dataDeMonCookie);
où 'dataDeMonCookie' est la partie du cookie contenant l'info véhiculée

Le code est accessible ici :



ou bien c'est seulement chez toi
ou bien ça a été réparé
car ça fonctionne pour moi :

--
Stéphane Moriaux avec/with iMac-intel

* Portugais - détecté
* Anglais
* Français
* Espagnol

* Anglais
* Français
* Espagnol

<javascript:void(0);>
unbewusst.sein
Le #23900241
SAM
Le 20/10/11 09:28, Une Bévue a écrit :
> je teste un script concernat les cookies.
> il marche nickel avec Chrome et Firefox, pas avec Safari.
> il s'agit d'enregistrer un objet :
> var datas={'cat': 2, 'limit': 18, 'offset': 0, 'rowid': 244};

donc le cookie contiendra :
"datas={'cat': 2, 'limit': 18, 'offset': 0, 'rowid': 244}"



oui :
"org.ytho.landp.datas={'cat': 2, 'limit': 18, 'offset': 0, 'rowid':
244}"
mais j'ajoute une propriété 'sum' égale à la somme des entiers (pour
vérif pollution), ce qui donne dans le k + haut :
"org.ytho.landp.datas={'cat': 2, 'limit': 18, 'offset': 0, 'rowid': 244,
'sum': 264}"
si la "sum" est réputée fausse, alors je retourne null.

j'imagine ?
ou même, simplement :
"{'cat': 2, 'limit': 18, 'offset': 0, 'rowid': 244}"
qu'à la relecture on analysera par :
var datas = eval(dataDeMonCookie);
où 'dataDeMonCookie' est la partie du cookie contenant l'info véhiculée



oui.

> Le code est accessible ici :
>
ou bien c'est seulement chez toi



ça déconnait UNIQUEMENT SUR Safari...

ou bien ça a été réparé



oui, au lieu d'envoyer une string avec des "," et des " ", j'envoie avec
encodeURI.
et là, ça roule avec tous les browsers testés (ff nightly, saf, chrome,
opera).
euh, j'ai aussi ajouté une "gestion" du path automatique :

si la page est :
http://mon.domain.qqc/dossier_niv_1/ossier_niv_2/etc/mon_fichier.qqc

le path sera mis à "dossier_niv_1", c'est pour éviter des collisions car
j'ai deux dossiers aux contenus quasi identiques "landp" et
landp_public", seules les bases de données différent.

var path=document.location.href.split("/")[3];

car ça fonctionne pour moi :


oui.


--
« Il faut bien agiter le peuple avant de s'en servir »
(Talleyrand)
Publicité
Poster une réponse
Anonyme