11540 sujets

JavaScript, DOM et API Web HTML5

Bonsoir les gens,

J’envisageais de faire les testes WebKit avec Midori, comme je n’ai plus Safari depuis longtemps et que j’ai fait l’économie d’installer Chrome, je pensais que les testes avec Midori, pourraient suffire et être représentatifs des résultats attendus avec les autres navigateurs WebKit, à côté de Opera (que je ne mettrait pas à jour pour rester à la dernière versions sous Presto) et Firefox (IE9 et plus, impossible, car pas disponible sous Windows XP).

Voilà que je tombe sur un bug qui me surprend tellement, et je me demande s’il est spécifique à Midori ou aux navigateurs WebKit en général. Du coup, si des gens veulent s’amuser à tester et me dire… si c’est spécifique à Midori, alors je cesserai de le considérer comme représentatif des autres navigateurs WebKit.

Ze test:


<!doctype html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Test document</title>
  </head>
  <body>
    <p id="status">…</p>
    <script type="text/javascript">
      var status = document.getElementById ("status");
      alert ("Object as string: " + status);
      alert ("`status instanceof HTMLParagraphElement`: " + (status instanceof HTMLParagraphElement));
      alert ("`typeof status`: " + (typeof status));
    </script>
  </body>
</html>


Résultat pour Firefox et Opera (Opera/Presto) :
Opera et Firefox a écrit :
Object as string: [object HTMLParagraphElement]
`status instanceof HTMLParagraphElement`: true
`typeof status`: object

… c’est cohérent.

Résultats pour Midori/Webkit :
Midori/WebKit a écrit :
Object as string: [object HTMLParagraphElement]
`status instanceof HTMLParagraphElement`: false
`typeof status`: string

… c’est incohérent.

Je sais bien que normalement il ne faudrait pas redéfinir `window.status`, mais en même temps, quand `status` est redéfini globalement, le navigateur devrait être capable de traiter le cas normalement. Ici, WebKit ou Midori (même je ne vois pas de raison pour laquelle ce ne serait pas la faute à WebKit), s’emmêle les pinceaux et voit deux choses à la fois. L’opération `status.textContent = "Some text.";`, échoue par exemple.
Modifié par hibou57 (10 Mar 2013 - 20:28)
Salut,

Merci, j'ai encore découvert un truc ! Smiley smile
En fait, window est l'objet global de niveau supérieur. C'est lui qui sert de contexte d'exécution.
Du coup, lorsque tu déclares une variable globale, elle est en fait assignée à window !

Exemple :
var foo = "bar";
console.log(window.foo);
>>> bar

Et comme il existe déjà une propriété status pour l'objet window...

tm