11548 sujets

JavaScript, DOM et API Web HTML5

Salut la compagnie Smiley smile

je viens de finir un script de detection de donnée navigateur...
Ce dernier et totalement fonctionnel sous tout navigateur sauf IE... grrr!!!
Mon objectif est de faire en sorte de soumettre un formulaire "hidden" auto-remplie par le script JS pour avoir redirection à soumission, vers une autre vue (page).
voila la methode de soumission de mon formulaire:
document.getElementById('formJS').submit();

voici la balise form du formulaire:
<form id="formJS" action="<?php echo htmlentities('/fr/default/index/savebrowserinfos'); ?>" method="post">


la soumission du formuaire et redirection vers savebrowserinfos.phtml fonctionne sous touts navigateurs sauf les IE...

Si quelqu'un à une idée sur le pourquoi cela ne fonctionne pas sous IE ?
Merci d'avance Smiley cligne
Bonjour,

Aucune idée sur le pourquoi ça fonctionne pas mais ton code m'interpelle pour son omission de la notion d'accessibilité ... Smiley decu

On a besoin de plus d'informations pour pouvoir t'aider ... sinon on sort de ton contexte. Smiley smile
Je rebondis aussi sur le titre si tu t'amuses à vivre dans le passé (compatibilité avec la version 5 et 5.5 d'Internet Explorer), on est vraiment pas sortis de l'auberge. Smiley lol
en gros c'est un script de detection de parametre navigateur...
le formulaire n'a pas de <input type=submit> (aucun bouton), mais est soumit automatiquement via JS...

le truc est que:
1°) je détecte via php et js si js activer (enfin plus ou moins... la n'est pas le problème)
2°) je redirige si js ok, vers une page contenant la message "détection de vos paramètre locaux" avec dedans un formulaire "hidden" comme suit:
<form id="formJS" action="/fr/default/index/savebrowserinfos" method="post">
   <input type="hidden" name="timezone" id="timezone" value="" />
   <input type="hidden" name="resolution" id="resolution" value="" />
   <input type="hidden" name="java" id="java" value="" />
   <input type="hidden" name="director" id="director" value="" />
   <input type="hidden" name="flash" id="flash" value="" />
   <input type="hidden" name="pdf" id="pdf" value="" />
   <input type="hidden" name="quicktime" id="quicktime" value="" />
   <input type="hidden" name="realplayer" id="realplayer" value="" />
   <input type="hidden" name="windowsmedia" id="windowsmedia" value="" />
   <input type="hidden" name="cookie" id="cookie" value="" />
</form>

3°) mon js inclue dans le <head> de cette page s'exécute et me détecte, les paramètres, remplie les champs, et remplie et soumet le formulaire (ce dernier ciblant sur une page de traitement des données de ce dernier. une vue plus qu'une page car MVC)

Mon soucis est que ce script fonctionne bien sur tout navigateur sauf IE de 5.5 à 7...

suite à de nombreux test via alert(); je remarque que le problème vient de cette fonction... plus ou moins de la méthode pour définir l'input cible correspondant à la valeur et le remplir avant soumission...
j'ai alléger le code pour vous montrer:
var getBrowserInfos = {

    start: function()
    {
        getBrowserInfos.autoComplementAndSubmit();
    },

    autoComplementAndSubmit: function()
    {
        for(var j=0; j<browser_vars.length; j++)
        {
             var key = browser_vars[j];
             var browserValue = browser\[key\]; // attention ne pas tenir compte des \

             // ici la methode qui pose probleme
             var hiddenInput = document.getElementById(key);
             hiddenInput.value = browserValue;
        }
        document.forms[0].submit();
    }
}

// on lance le script au domready
window.addEvent('domready', getBrowserInfos.start);


si quelqu'un peut me dire pourquoi ce script ne fonctionne pas sous IE...
suite à mes test de ce script, j'arrive à en deduire qu'un alert('coucou') paase avant le hiddenInput.value = browserValue; mais plus apres celui-ci
donc le script plante à la definition de la value dans l'input cible et ce que sous IE...
un alert('hiddenInput'); me renvoi null sous IE et [object HTMLInputElement] sous tout autre navigateur...

Si quelqu'un à un idée...
Merci d'avance Smiley cligne
Modifié par beroots (19 Dec 2008 - 11:27)
le probleme semble sur ma methode pour soumettre le formulaire... elle fonctionne bien sur tout navigateur, mais ne fonctionne pas sous IE...

j'ai essayé ceci pour IE mais rien ne fonctionne:
document.getElementById["formJS"].submit();
document.getElementsByName["formJS"].submit();
document.forms[0].submit();
document.forms["formJS"].submit();

une idée ?
le probleme ne vient pas du form mais en amont
c'est quoi ce 'browser_vars, il sort d'où ?
sort nous le code où il est instancié stp.
idem pour la variable browser
Modifié par Gatsu35 (21 Dec 2008 - 08:02)
tain bien planqué mais :
quel est cette horreur :

var hiddenInput = document.getElementsByName(key); //<== ici elle est ton horreur
hiddenInput.value = browserValue;

Ca te dirait pas d'utiliser un getElementById et de coller des id sur des <input type="hidden" /> ?

Ca sera autrement plus efficace, surtout que le getElementsByName renvoit pas mal de merde selon le navigateur. Et surtout il peut te renvoyer une nodeList au lieu de te renvoyer un seul élément.
Administrateur
Bonjour,

1) un formulaire A un bouton input type="submit", input type="image" ou button pour le cas où JS n'existe pas sur le navigateur, est désactivé par choix ou par obligation ...

2) ensuite tu fais ce que tu veux en JS ou presque, comme supprimer le bouton de soumission; au moins c'est non-obstrusif. Le problème classique, c'est le formulaire qui se soumet de façon auto alors que tu es juste en train de le lire avec un lecteur d'écran, Smiley sweatdrop sachant que beaucoup de non-voyants activent JS.

3) j'ai pas bien compris ce que tu essayais de détecter: le navigateur (tu vas avoir des surprises avec les navigateurs se faisant passer pour IE Smiley rolleyes ) ou les propriétés supportées (là j'y connais pas grand chose, enfin je sais juste qu'on peut faire ça proprement).