Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Réflexion en Javascript : PropertyValue

18 réponses
Avatar
Gloops
Bonjour tout le monde,

J'ai vu sur

http://www.tutorialspoint.com/javascript/javascript_forin_loop.htm

qu'on pouvait parcourir, par exemple, les propriétés du navigateur ainsi :

for (aProperty in navigator) {
document.write(aProperty);
document.write("<br />");
}

et ça affiche bravement les noms des propriétés du navigateur.

Alors du coup, je me pose la question de comment on peut terminer ce
travail ?

J'ai essayé avec navigator.getPropertyValue(aProperty), mais ça ne se
contente pas de ne pas me retourner la valeur de la propriété, ça plante
la boucle. L'exécution du script se poursuit après la boucle.

Si j'en crois d'autres docs, getPropertyValue peut être une bonne idée
avec d'autres objets, mais pas avec navigator.

Ma première tentative avait été aProperty.value, avec et sans V
majuscule : c'est moins catastrophique puisque toute la boucle
s'exécute, mais il m'annonce toutes les propriétés avec valeur
undefined, ce sur quoi j'ai un gros doute.

Meilleure idée ?

8 réponses

1 2
Avatar
Gloops
Le 08/08/2016 à 12:14, SAM a écrit :
Le 08/08/16 à 10:04, Gloops a écrit :
Un point m'avait échappé.
for(prop in navigator)
{
document.write(prop + navigator[prop] + "
");
}
s'exécute bien, mais en m'affichant ça dans la console :

Est-ce que :
for(prop in navigator)
{
document.write(prop + eval('navigator.'+prop) + "
");
}
résoudrait ton problème ?
(pas testé)
Cordialement,

ça affiche bien le résultat mais en grinçant dans la console :
/*
Exception: [Exception... "Component is not available" nsresult:
"0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame ::
Scratchpad/2 line 4 > eval :: <TOP_LEVEL> :: line 1" data: no]
*/
Donc même résolution, j'ai mis
document.write(prop + " ==> " + eval('this.navigator.'+prop) + "
");
Je cherchais comment effectuer cette interprétation, je me rappelais
eval en VB, mais je ne savais pas que c'était pareil en Javascript.
Dans ce cas de figure c'est facultatif, mais à l'occasion ça doit bien
être utile.
Avatar
Gloops
Le 08/08/2016 à 00:57, SAM a écrit :
Le terminé de document.write()
c'est document.close();
Le commencé de document.write()
c'est document.open();

Au fait le document.close() c'était une boutade ?
Parce que l'ouverture est faite automatiquement par HTML ...
C'est bien avec cscript ou wscript, qu'on ouvre et ferme les documents
explicitement ?
Sinon c'est effectivement arrivé deux fois que Firefox oublie de
s'arrêter d'attendre la suite ...
Avatar
SAM
Le 08/08/16 à 13:13, Gloops a écrit :
Le 08/08/2016 à 12:14, SAM a écrit :
for(prop in navigator)
{
document.write(prop + eval('navigator.'+prop) + "
");
}
résoudrait ton problème ?

ça affiche bien le résultat mais en grinçant dans la console :
/*
Exception: [Exception... "Component is not available" nsresult:
"0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame ::
Scratchpad/2 line 4 > eval :: <TOP_LEVEL> :: line 1" data: no]
*/

Je n'arrive pas à reproduire la chose ...
Cordialement,
--
Stéphane Moriaux avec/with iMac-intel 27" & Mac OS X 10.6.8
Avatar
SAM
Le 08/08/16 à 13:13, Gloops a écrit :
document.write(prop + " ==> " + eval('this.navigator.'+prop) + "<br
/>");
Je cherchais comment effectuer cette interprétation, je me rappelais
eval en VB, mais je ne savais pas que c'était pareil en Javascript.
Dans ce cas de figure c'est facultatif, mais à l'occasion ça doit bien
être utile.

eval est très très très très rarement nécessaire en JS
La preuve : tu as trouvé comment faire sans et en + propre !
[cite]
document.write(this.navigator[prop])
s'exécute sans erreur chez moi.
[/cite]
bien que ça semble très utile en Json où on fait évaluer une string qui
représente un tableau d'objets
<http://www.json.org/js.html>
<http://www.json.org/json-fr.html>
Cordialement,
--
Stéphane Moriaux avec/with iMac-intel 27" & Mac OS X 10.6.8
Avatar
SAM
Le 08/08/16 à 13:03, Gloops a écrit :
Le 08/08/2016 à 12:04, SAM a écrit :
Le 08/08/16 à 03:36, Gloops a écrit :
document.write("<table>")

AAAaaRRRrrGGGggHHHhhh !!!
var ecrit = [];
for(var propriete in navigator) {
ecrit.push('nt<dt>navigator.' + propriete +
'</dt>ntt<dd>' + navigator[propriete] +'</dd>');
}
document.write('<dl>' + ecrit.join('') +'n</dl>');

Ah oui, pour prendre moins de largeur ?

Non, question de sémantique
propriété / résultat <—> terme / définition
Pour les colonnes on voit avec les styles
<http://stephane.moriaux.pagesperso-orange.fr/truc/proprietes-write>
ne pas faire attention aux scripts KKbouilla rajoutés par Orange :-(
et me dire si ça chagrine ta console
Cordialement,
--
Stéphane Moriaux avec/with iMac-intel 27" & Mac OS X 10.6.8
Avatar
Gloops
Le 09/08/2016 à 00:23, SAM a écrit :
Le 08/08/16 à 13:13, Gloops a écrit :
Le 08/08/2016 à 12:14, SAM a écrit :
for(prop in navigator)
{
document.write(prop + eval('navigator.'+prop) + "
");
}
résoudrait ton problème ?

ça affiche bien le résultat mais en grinçant dans la console :
/*
Exception: [Exception... "Component is not available" nsresult:
"0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame ::
Scratchpad/2 line 4 > eval :: <TOP_LEVEL> :: line 1" data: no]
*/

Je n'arrive pas à reproduire la chose ...
Cordialement,

Avec le même navigateur ?
J'ai installé l'extension avec les outils de développement, il se peut
que ça change quelques bricoles.
Avatar
SAM
Le 09/08/16 à 02:58, Gloops a écrit :
Le 09/08/2016 à 00:23, SAM a écrit :
Le 08/08/16 à 13:13, Gloops a écrit :
/*
Exception: [Exception... "Component is not available" nsresult:
"0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame ::
Scratchpad/2 line 4 > eval :: <TOP_LEVEL> :: line 1" data: no]
*/

Je n'arrive pas à reproduire la chose ...


Dans la console du navigateur ou la "Console web"
Avec le même navigateur ?

Firefox 48 pour Mac (vieux)
J'ai installé l'extension avec les outils de développement,

Quelle extension ?
(y en a un paquet !)
Pour ma part :
- Firebug
- Web Developer
Cordialement,
--
Stéphane Moriaux avec/with iMac-intel 27" & Mac OS X 10.6.8
Avatar
Gloops
Le 09/08/2016 à 14:11, SAM a écrit :
Le 09/08/16 à 02:58, Gloops a écrit :
Le 09/08/2016 à 00:23, SAM a écrit :
Le 08/08/16 à 13:13, Gloops a écrit :
/*
Exception: [Exception... "Component is not available" nsresult:
"0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame ::
Scratchpad/2 line 4 > eval :: <TOP_LEVEL> :: line 1" data: no]
*/

Je n'arrive pas à reproduire la chose ...


Dans la console du navigateur ou la "Console web"

La console web, en fait. C'est pour ça qu'est écrit "Scratchpad". Je ne
sais pas encore trop ce que signifie le 2 derrière. J'ai cru que c'était
un numéro de version, mais une fois j'ai eu autre chose.
Il faudra que je regarde dans l'autre.
Avec le même navigateur ?

Firefox 48 pour Mac (vieux)

Ah, donc même navigateur, mais pas même plateforme.
On pourrait farfouiller pour voir si une autre extension y serait pour
quelque chose, mais j'ai un peu peur que ça fasse beaucoup de temps pour
quelque chose qu'en définitive j'ai contourné assez facilement.
Si ça se trouve, l'objet navigator est considéré comme non disponible
car déjà déclaré pour une autre opération, et en le préfixant je
confirme que c'est le même. Bizarre mais crédible.
J'ai installé l'extension avec les outils de développement,

Quelle extension ?
(y en a un paquet !)
Pour ma part :
- Firebug
- Web Developer

Web Developer
Cordialement,

Pareil
1 2