OVH Cloud OVH Cloud

Modification d'innerHTML impossible dans un .hta

5 réponses
Avatar
Babar
Bonjour,

Je me suis fait un .hta qui fonctionne chez moi.
Il utilise notamment une fonction permettant de modifier le contenu d'une
balise span via sa propriété innerHTML.
(ci dessous les bouts de codes qui illustrent le procédé)
Or cette fonction ne semble pas fonctionner chez un client : pas de
modification du contenu de la balise.
Je n'ai pas le détail sur sa version d'ie, mais je sais qu'il est sous
windows XP.
J'ai cru comprendre que la sécurité d'ie n'a rien à voir dans le cadre du
.hta ...
Si quelqu'un a une idée, elle est bienvenue.
Merci

Bruno

-----------code------------
<td>
Action : <SELECT NAME='myQuery'
OnChange='setQueryFields(myQuery[myQuery.selectedIndex].text)'>
<OPTION SELECTED>Choisir
<OPTION >Sauvegarde
</SELECT>
</td>

</tr>
<tr>
<td align='right' colspan='2'>
<SPAN id='queryFields'> </SPAN>
</td>
</tr>
[...]

function setQueryFields(requestType)
{
switch (requestType)
{
case 'Choisir' :
document.all.queryFields.innerHTML = "Choisir";
break;
case 'Sauvegarde' :

document.all.queryFields.innerHTML = "Sauvegarde";
break;
}
}

-----------code------------

5 réponses

Avatar
Méta-MCI
Bonsoir !

AMHA, tu devrais :
- encadrer le script par des balises <script> </script> ; mais c'est
peut-être déjà fait, dans le code complet.
- plutôt identifier les objets avec getElementById('ID')
- utiliser .selectedIndex au lieu de .text ; cela donnera l'index de
l'élément sélectionné (part de zéro)
- utiliser .innerText au lieu de innerHTML ; au moins pour voir ce que ça
donne
- toujours utiliser id= au lieu de tantôt id=, tantôt NAME - boire un coup, car c'est l'heure de l'apéro
- considérer quand même la sécurité, car, oui, ça peut jouer sur les .HTA ;
même si ça joue différemment, il reste des messages intempestifs, surtout
depuis le SP-2.
- déplacer le script (la fonction) entre <head> et </head> ; mais ce n'est
pas obligatoire.
- user et abuser des "alert()" pour voir ce qui se passe.
- rajouter des glaçons, car les autres ont (déjà) fondu.


Voici qq. exemples de lignes :

<SELECT id='myQuery'
OnChange='setQueryFields(getElementById("myQuery").selectedIndex);'>


case 0 :
pointeur=document.getElementById('queryFields');
pointeur.innerText = "CCHHOOIISSIIRR";



@+

Michel Claveau
Avatar
Gilles LAURENT
"Babar" a écrit dans le message de
news:44fee5a7$0$5072$
| Bonjour,

Bonjour,

| Je me suis fait un .hta qui fonctionne chez moi.
| Il utilise notamment une fonction permettant de modifier le contenu
| d'une balise span via sa propriété innerHTML.
| (ci dessous les bouts de codes qui illustrent le procédé)
| Or cette fonction ne semble pas fonctionner chez un client : pas de
| modification du contenu de la balise.

Tout d'abord, pouvez-vous vous assurer que les scripts Javascript
fonctionne correctement chez votre client. Si cela n'est pas le cas
alors vous pouvez peut-être le conseiller dans une réinstallation du WSH
:
http://www.microsoft.com/downloads/details.aspx?displaylang=fr&FamilyIDÇ17d943-7e4b-4622-86eb-95a22b832caa

-- test.js --
WScript.Echo ("Javascript") ;
-- test.js --

| Je n'ai pas le détail sur sa version d'ie, mais je sais qu'il est sous
| windows XP.
| J'ai cru comprendre que la sécurité d'ie n'a rien à voir dans le
| cadre du .hta ...

En effet, c'est l'exécutable mshta.exe qui est utilisé comme hôte pour
l'exécution des fichiers HTA. Les restrictions définies dans IE sont
donc "hors scope".

| Si quelqu'un a une idée, elle est bienvenue.
| Merci
|
| Bruno

[...]

| OnChange='setQueryFields(myQuery[myQuery.selectedIndex].text)'>

Si vous mixez du vbscript et du javascript dans votre code alors il est
indispensable de spécifier le langage utilisé dans le gestionnaire
d'évènement: OnChange='Javascript:setQueryFields(...)'>

[...]

| function setQueryFields(requestType)

Egalement pour les fonctions :

<SCRIPT Language="Javascript">
function setQueryFields(requestType)
{
...
}
</SCRIPT>

Ci-dessous un script HTA inspiré du votre et testé sous XP/SP1/SP2 et
W2K3 SP1 :

-- InnerHTML.hta --

<HTML>
<HEAD>
<TITLE>InnerHTML</TITLE>

<SCRIPT Language="Javascript">
function setQueryFields(requestType)
{
switch (requestType) {

case 'Choisir' :
document.all.queryFields.innerHTML = "Choisir";
break;

case 'Sauvegarde' :
document.all.queryFields.innerHTML = "Sauvegarde";
break;
}
}
</SCRIPT>
</HEAD>

<BODY onload="VBscript:MsgBox 'InnerHTML !'">
<TABLE>
<TR>
<TD>
Action:
<SELECT NAME='myQuery'
OnChange='Javascript:setQueryFields(myQuery[myQuery.selectedIndex].text)
'>
<OPTION SELECTED>Choisir
<OPTION>Sauvegarde
</SELECT>
</TD>
</TR>

<TR>
<TD>
<SPAN id='queryFields'></SPAN>
</TD>
</TR>
</TABLE>

</BODY>
</HTML>

-- InnerHTML.hta --

J'espère que toutes ces suggestions vous permettront de résoudre et/ou
comprendre le problème. Je vous invite dans un premier temps à valider
puis transmettre à votre client le script HTA proposé et ensuite revenir
vers nous si le problème n'est toujours pas résolu.

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
Avatar
Méta-MCI
Bonsoir !

En effet, c'est l'exécutable mshta.exe qui est utilisé comme hôte pour
l'exécution des fichiers HTA. Les restrictions définies dans IE sont
donc "hors scope".




Je ne suis pas tout à fait d'accord. Par exemple, le classement des sites,
dans "Sites de confiance", ou "Sites sensibles" joue dans le choix par
windows des messages affichés, pour IE comme pour les HTA.

D'autres paramètres permettent également de faire sauter, par exemple, des
messages tels que "Un active-X est susceptible.... etc."

Également les fichiers marqués comme potentiellement dangereux par IE
refusent de se charger dans un HTA. A noter que IE ne peut gérer cette
métadonnée que sur du NTFS.

Et aussi, j'ai des pages, locales, bloquées par IE, comme pages de pub
intempestives. Tant que je ne vais pas modifier les sites en question, dans
les options d'IE, mes HTA ne peuvent les ouvrir.


Certes, c'est mshta.exe qui est lancé, au lieu de iexplorer.exe Mais ces
deux programmes utilisent nombre de ressources communes, notamment le moteur
de rendu HTML, le moteur de script, etc. Et il y a quelques paramètres
communs, notamment dans le domaine de la sécurité.



@-salutations

Michel Claveau



Avatar
Babar
Merci à tous pour vos préciseuses suggestions et informations.
Je vais suivre vos conseils et vous tiendrai au courant, ... d'ici demain
soir je pense.

Bruno


"Méta-MCI" a écrit dans le message de
news:
Bonsoir !

En effet, c'est l'exécutable mshta.exe qui est utilisé comme hôte pour
l'exécution des fichiers HTA. Les restrictions définies dans IE sont
donc "hors scope".




Je ne suis pas tout à fait d'accord. Par exemple, le classement des sites,
dans "Sites de confiance", ou "Sites sensibles" joue dans le choix par
windows des messages affichés, pour IE comme pour les HTA.

D'autres paramètres permettent également de faire sauter, par exemple, des
messages tels que "Un active-X est susceptible.... etc."

Également les fichiers marqués comme potentiellement dangereux par IE
refusent de se charger dans un HTA. A noter que IE ne peut gérer cette
métadonnée que sur du NTFS.

Et aussi, j'ai des pages, locales, bloquées par IE, comme pages de pub
intempestives. Tant que je ne vais pas modifier les sites en question,
dans

les options d'IE, mes HTA ne peuvent les ouvrir.


Certes, c'est mshta.exe qui est lancé, au lieu de iexplorer.exe Mais ces
deux programmes utilisent nombre de ressources communes, notamment le
moteur

de rendu HTML, le moteur de script, etc. Et il y a quelques paramètres
communs, notamment dans le domaine de la sécurité.



@-salutations

Michel Claveau








Avatar
Babar
Bonjour,

Vous allez rire...
Le code fontionne tès bien, ... lorsqu'il est présent !
Hors le filtre anti-virus/spam de ma société : supprime tout contenu de
fichier contenu entre deux balises script !!!
Tordant non ?
Donc je passe par un autre media, plus "tolérant".

Merci encore.

Bruno



"Babar" a écrit dans le message de
news:44ff3405$0$5099$
Merci à tous pour vos préciseuses suggestions et informations.
Je vais suivre vos conseils et vous tiendrai au courant, ... d'ici demain
soir je pense.

Bruno