2010-01-30 5 views
2

J'ai fait des recherches sur internet et sur ce super site de stackoverflow.com en particulier, mais je ne peux pas m'en empêcher. Je ne suis pas un programmeur très expérimenté et un de mes amis m'a demandé de corriger le bug sur IE6 uniquement. Cela fonctionne sur FF, IE7/8, Opera. Voici la partie du code qui donne un message d'erreur sur IE6:Objet ne supporte pas cette propriété ou cette méthode erreur javascript dans IE6 seulement

(function(d, n, r) { 
    var ie, jscript, settings = {}; 
    function add(element, type, listener) { element.addEventListener(type, listener, false); }; 
    function remove(element, type, listener) { element.removeEventListener(type, listener, false); }; 
    var l = {change:[], ready:[], load:[]}; 
    a11y = function(f) { 
    a11y.change(f); 
    }; 
}) 
(self.document, self.navigator); 

L'erreur est en ligne 7: a11y.change (f); Tous les autres navigateurs sont OK, juste IE6. Je ne suis pas l'auteur du script, je tente juste de résoudre ce problème. Quelqu'un peut-il aider, s'il vous plaît? Il doit y avoir un problème avec la déclaration de fonction ou ...?

+0

Quel est le message d'erreur que vous recevez? –

+0

il y a beaucoup de code ici qui semble sans rapport avec l'erreur et du code manquant dans l'exemple. Pouvez-vous nous donner un peu plus de contexte sur ce que ce code essaie de faire? –

+1

tout code avec des noms de variable comme 'a11y' doit vous rendre nerveux :-) –

Répondre

1

L'exemple semble assez confus il y a beaucoup de code là qui semble être une distraction.

D'après ce que je peux voir le problème est dans ce code:

a11y = function(f) { 
    a11y.change(f); 
}; 

Ici, vous définissez une nouvelle fonction appelée a11y et à l'intérieur de la définition de cette fonction que vous appelez une méthode « changement » sur la fonction tout en étant défini. Je suis surpris que cela fonctionne dans n'importe quel navigateur.

+0

Merci pour vos commentaires. J'ai décidé de fournir l'URL de la page de test. Le voici: http://www.apbsystems.com/awareness/sco1.html Il y a un javascript ici: http://www.apbsystems.com/awareness/base/js/a11y/a11y.js Il y a plus de scripts là mais je suppose que c'est le script qui cause le problème. L'erreur que j'obtiens est "L'objet ne supporte pas cette propriété ou méthode" dans IE6. Merci pour tous vos efforts. Je ne suis pas sûr de ce que tout le script veut dire. J'ai passé deux jours à essayer de le découvrir. Fondamentalement, il ouvre une fenêtre ... – PatrikAPB

1

Pour moi, il génère également une erreur dans IE7 et IE8.

Il signale le numéro de ligne d'erreur en tant que ligne 4 (ligne 3 dans IE6 mais IE6 est toujours désactivé par un). Cela indique que l'erreur est:

function add(element, type, listener) { element.addEventListener(type, listener, false); }; 

qui n'est pas surprenant étant donné que IE ne met pas en œuvre addEventListener. L'appel équivalent sur IE est:

element.attachEvent("on" + type, listener) 

Il ressemble à la page utilise jQuery, vous devriez donc probablement utiliser des méthodes jQuery pour cela.
Au lieu d'appeler

add(element, type, listener) 

vous pouvez appeler

$(element).bind(type, listener) 

Vous devez également fixer la fonction « supprimer » dans la ligne 5.

0

Merci pour votre aide. Comme suggéré par Sean Hogan, le problème était que IE n'implémente pas addEventListener. J'ai trouvé une solution similaire quelque part sur internet et cela a fonctionné pour moi.

function add(element, type, listener) { 
     remove(element, type, listener); 
     element.attachEvent("on"+ type, listener); 
    }; 
    function remove(element, type, listener) { 
     element.detachEvent("on"+ type, listener); 
    }; 
    settings.jscript = jscript = @_jscript_version; 
    settings.ie = ie = parseFloat(n.userAgent.split("MSIE ")[1]); 
    if (d && d.execCommand) { 
    try { d.execCommand("BackgroundImageCache",false, true); } 
    catch (e) { } 
    } 

Merci encore!

Questions connexes