IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

ATTENTION ne déclarez jamais une variable nommée "status"


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 214
    Points : 100
    Points
    100
    Par défaut ATTENTION ne déclarez jamais une variable nommée "status"
    Bonjour à tous.

    Si vous êtes amateur de casse tête je vous en prie, vous allez prendre votre pied!

    J'ai une page contenant un ensemble de facture présentées sous forme de tableau.
    Je dois réaliser une chose très bête et banale: si je coche une case à cocher à côté de l'intitulé d'une facture, je dois pouvoir lire la cellule "Status" de ce tableau. Ou plus exactement prendre l'information dans un champ de type "hidden".

    Inutile de dire que ça fonctionne impeccablement bien sous Firefox et tout autre navigateur moderne.
    Mais là où le bas blesse... c'est que:
    - ça ne fonctionne pas sur IE si la requête provient du serveur
    - ça fonctionne sur IE si de la même page provenant du serveur je fais "afficher la source" > enregistrer dans un fichier .html et que je le lance...

    La seule différence entre les 2? IE m'indique dans la version locale que pour me protéger il a restreint l'exécution des scripts... (blablabla) et je lui donne l'autorisation de supprimer la restriction...

    Des petits screenshot valent la peine je pense:




    Alors je vous donne la version HTML Locale (sauvée depuis IE):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      <title></title>
      <script src="/js/jquery-1.2.6.js" type="text/javascript"></script>
      <script src="/js/tablecloth.js" type="text/javascript"></script>
      <script src="/js/general.js" type="text/javascript"></script>
      <!--[if lt IE 8]>
    	<script src="/js/IE8.js" type="text/javascript"></script>
      <![endif]-->
      <link rel="stylesheet" media="screen" type="text/css" title="General" href="/css/general.css" />
     
      </head>
    <body class="tundra">
      <div>
        <img src='/img/logo_xxx.jpg' alt='xxx'/><br/><br/>
      </div>
      <div class="content">
        	<script type="text/javascript">
    		var rulesStatus = new Array();
    					rulesStatus["In Preparation"] = new Array();
    							rulesStatus["In Preparation"] ["Approved"] = 7;
    							rulesStatus["In Preparation"] ["Delete"] = 0;
    								rulesStatus["Approved"] = new Array();
    							rulesStatus["Approved"] ["Sent"] = 8;
    								rulesStatus["All"] = new Array();
    							rulesStatus["All"] ["Sent"] = 8;
    							rulesStatus["All"] ["Paid"] = 9;
    							rulesStatus["All"] ["Partial paid"] = 10;
     
    		function displayGeneralActions() {
    			i = 0;
    			currentCheckbox = document.getElementById('checkboxInvoice_'+i);
    			currentStatus = '';
    			isNotPossible = false;
    			while (currentCheckbox != null) {
    				if (currentCheckbox.checked == true) {
    					status = document.getElementById('statusName_'+i).value;
    					alert(status);
    					if (currentStatus == '')
    						currentStatus = status;
    					if ((status == 'In preparation' && currentStatus != 'In Preparation') || (status == 'Approved' && currentStatus != 'Approved')) {
    						isNotPossible = true;
    						i = 0; 
    						break;
    					}
    					if (status != 'In preparation' && status != 'Approved')
    						currentStatus = 'All';
    				}
    				i++;
    				currentCheckbox = document.getElementById('checkboxInvoice_'+i);
    			}
    			alert('INFO: '+i+'\nStatus: '+currentStatus+'\n boolean: '+isNotPossible);
    			/*
    				TESTER si i=0 => masquer menu else afficher
    				si aucun checked status est vide!
    			*/
    			selection = document.getElementById('selectionGeneralActions');
    			if (i==0 || currentStatus=='') 
    				selection.style.display = 'none';
    			else {
    				selection.style.display = 'block';
    			}
     
    		}
    	</script>
    	<select id='filter_0' name='centerFilter' onchange="filterPage('/invoice')">
    		<option value='all'>All centers</option>
    	<select id='filter_1' name='companyFilter' onchange="filterPage('/invoice')">
    		<option value='all'>All companies</option>
    	<select id='filter_2' name='statusFilter' onchange="filterPage('/invoice')">
    		<option value='all'>All status</option>
    		<option value="In Preparation">In Preparation</option><option value="Approved">Approved</option>	</select>
    	<select id='filter_3' name='periodFilter' onchange="filterPage('/invoice')">
    		<option value='all'>All periods</option>
    		<option value="2008-09-01 2008-09-30">2008/09/01 - 2008/09/30</option><option value="2008-10-01 2008-10-31">2008/10/01 - 2008/10/31</option><option value="2008-10-02 2008-10-15">2008/10/02 - 2008/10/15</option>	</select>
    	<select id='filter_4' name='numberFilter' onchange="filterPage('/invoice')">
    		<option value='all'>All numbers</option>
    		<option value="-">-</option><option value="2008/1">2008/1</option><option value="2008/2">2008/2</option><option value="2008/3">2008/3</option><option value="2008/4">2008/4</option>	</select>
    	<input type='button' value='Remove filters' onclick='document.location.href="/invoice"'>
    	<div id="overview">
    	<table class="tableCSS">
    		<tr>
    			<th><input type="checkbox" onclick="javascript:controlCheckbox('checkboxInvoice_',this);displayGeneralActions();"/></th>
    			<th>Center</th>
    			<th>Number</th>
    			<th>Company</th>
    			<th>Period</th>
    			<th>Due date</th>
    			<th>Amount</th>
    			<th>Status</th>
    			<th>Operation</th>
    		</tr>
    								<tr>
    			<td><input type="checkbox" id="checkboxInvoice_0" name="96" onclick="javascript:displayGeneralActions()"/> </td>
    			<td><span id="centerName_0">XX</span></td>
    			<td><span id="invoiceNumber_0">-</span></td>
    			<td><span id="companyName_0">XX</span></td>
    			<td><span id="startDate_0">2008/10/01</span> - <span id="endDate_0">2008/10/31</span></td>
    			<td><span id="dueDate_0">2009/12/30</span></td>
    			<td><span id="totalPrice_0">295</span>€</td>
    			<td>
    				In Preparation				<input type="hidden" id="statusName_0" value="In Preparation" />
    			</td>
    			<td>
    				<a href="/invoice/view?id=96"><img src="/img/view-trans.png"/></a>
    									<a href="/invoice/edit?id=96"><img src="/img/edit-trans.png"/></a>
    					<a href="/invoice/delete?id=96"><img src="/img/delete-trans.png"/></a>
    								<input type="hidden" id="idInvoice_0" value="96"/>
    			</td>
    		</tr>
    						<tr>
    			<td><input type="checkbox" id="checkboxInvoice_1" name="32" onclick="javascript:displayGeneralActions()"/> </td>
    			<td><span id="centerName_1">XX</span></td>
    			<td><span id="invoiceNumber_1">-</span></td>
    			<td><span id="companyName_1">XX</span></td>
    			<td><span id="startDate_1">2008/09/01</span> - <span id="endDate_1">2008/09/30</span></td>
    			<td><span id="dueDate_1">2008/11/30</span></td>
    			<td><span id="totalPrice_1">340</span>€</td>
    			<td>
    				In Preparation				<input type="hidden" id="statusName_1" value="In Preparation" />
    			</td>
    			<td>
    				<a href="/invoice/view?id=32"><img src="/img/view-trans.png"/></a>
    									<a href="/invoice/edit?id=32"><img src="/img/edit-trans.png"/></a>
    					<a href="/invoice/delete?id=32"><img src="/img/delete-trans.png"/></a>
    								<input type="hidden" id="idInvoice_1" value="32"/>
    			</td>
    		</tr>
    			</table>
    	<div style="height:40px;"></div>
    	<fieldset id="selectionGeneralActions" class="validationButton" style="display: none;">
    		<legend>Pour la sélection</legend>
    	</fieldset>
    </div>
      </div>
    </body>
    </html>
    Forcément je ne peux pas vous donner la version envoyée par le serveur mais bon... elle est rigoureusement identique donc...

    Je vous remercie d'avance pour l'aide que vous pourrez me fournir.

  2. #2
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    salut

    ajouter l'url du serveur dans la zone sûre ?
    outils > options internet > sécurité > sites de confiance > sites > ajouter le site

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 214
    Points : 100
    Points
    100
    Par défaut
    En effet cela solutionne le problème... mais ce n'est pas réellement une solution valable...

    Et puis pourquoi donc ce getElementById fonctionne impeccablement bien partout sans le rajouter dans mes sites de confiance et pas là? Je ne fais quand même rien "d'exotique".

  4. #4
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Citation Envoyé par k o D Voir le message
    mais ce n'est pas réellement une solution valable...
    si.
    si les sites de la zone internet n'ont pas le droit d'exécuter le javascript, tu n'as que 2 solutions :
    - autoriser les sites de la zone internet a exécuter les scripts
    - mettre le ou les sites concernés dans la zone sûre (qui par défaut a le droit d'exécuter les scripts)
    Citation Envoyé par k o D Voir le message
    Je ne fais quand même rien "d'exotique".
    non... si l'on omet que tu utilises des scripts dans tes pages qui peuvent potentiellement avoir un but malveillant pour l'utilisateur (tous les programmeurs ne sont pas des "gentils" et les scripts peuvent être une porte d'accès à des informations sur l'utilisateur

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 214
    Points : 100
    Points
    100
    Par défaut
    Bah oui bien entendu que je pourrais faire du "mal".
    Mais premièrement IE sur la version envoyée par le serveur ne m'indique absolument rien comme message d'avertissement!
    Il ne me le met que si je sauve la page et que je la réouvre.

    ça va être simple de dire au client "non non pas de soucis faut la rajouter dans vos sites de confiance sinon IE bloque l'exécution des scripts"

    Et ma question c'est pourquoi là? Pourquoi à cette page, qui utilise javascript comme toutes mes autres pages (et d'autres encore bien plus) est interprétée par IE comme une page avec un risque potentiel?

    C'est hallucinant quoi...
    Surtout que je fais identiquement la même chose sur une autre page qui elle ne me pose pas le moindre ennui.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 214
    Points : 100
    Points
    100
    Par défaut
    Bon j'ai trouvé la solution... enregistrez le quelque part dans votre cerveau ça vous évitera de devenir dingue comme moi pendant 24h.

    IE 7 (aucune idée pour les versions antérieures) ne tolère pas que vous déclariez une variable portant le nom "status" si votre site ne fait pas partie des "sites de confiance". Changez simplement le nom de la variable et le problème est résolu...


    Et après, il y a encore des gens qui m'assurent qu'Internet Explorer n'est pas une p******** de poubelle!

  7. #7
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    c'est vrai qu'il a tord de protéger une propriété existante de son framework (status = window.status)
    quelque soit le langage et la plateforme il est déconseillé (voire interdit) de définir quelquechose portant le même nom (ou la même signature) que quelque chose d'existant. à plus forte raison les variables réservées

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 214
    Points : 100
    Points
    100
    Par défaut
    Il faudra que l'on m'explique alors pourquoi Firefox et autres n'ont aucun soucis avec.

    Enfin bon voilà, je me remet de mes émotions, je suis finalement content d'avoir résolu le problème...
    Merci à toi

  9. #9
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    parce que window.status n'est utilisé que par IE...
    si tu veux que ça bug sur les autres navigateurs, redéfinis les objets window, document, ou les fonctions document.getElementById ou je ne sais quoi. comme ça même combat sur tous les navigateurs

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. recupérer le contenu d'une variable nommée dynamiquement
    Par sebpern dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 17/11/2008, 08h39
  2. quotes dans une variable
    Par requiemforadream dans le forum ASP
    Réponses: 3
    Dernier message: 09/05/2005, 09h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo