64 votes

Quels sont les problèmes de navigation croisée avez-vous rencontré?

Alors que le développement de plusieurs jeux de navigateurs, quels problèmes avez-vous rencontrés alors que le développement en raison des différences dans la mise en oeuvre navigateur?

Pour commencer je suis énumérant certains de ceux que j'ai rencontrés:

  • Un nœud de texte dans Firefox permet uniquement de données de 4 ko. Donc, XML, Ajax réponse est divisé en plusieurs texte nœuds enfants au lieu d'un seul nœud. Sa fine dans Internet Explorer. Pour Firefox, pour obtenir la totalité des données, vous avez besoin d'utiliser un nœud.normaliser avant d'appeler le nœud.firstChild ou utiliser un nœud.textContent, qui sont tous deux Mozilla méthodes spécifiques
  • Internet Explorer n'est pas à remplacer   ou HTML char code 160, vous devez le remplacer par son équivalent Unicode \u00a0
  • Dans Firefox, une manière dynamique créée champ de saisie dans un formulaire (créé à l'aide de document.createElement) ne passe pas sa valeur sur le formulaire de soumission.
  • document.getElementById dans Internet Explorer sera de retour d'un élément, même si le nom de l'élément correspond. Mozilla uniquement retourne l'élément si l'id correspond.
  • Dans Internet Explorer si une boîte de sélection n'a pas une valeur représentée par l'une des options, il affiche en blanc, Firefox affiche la première option.

40voto

Matt Gardner Points 923

Le seul qui vraiment m'arrive:

Si vous êtes intéressés par les questions elles-mêmes, QuirksMode.org est une ressource incroyable, j'ai utilisé tous les jours avant de faire le saut à côté client bibliothèques. Consultez également John Resig est Le DOM est un Gâchis présentation à yahoo, qui donne beaucoup de théorie sur la façon de traiter avec la croix-navigateur sujets de manière efficace.

Toutefois, si vous êtes intéressé, il suffit d'avoir résolus, votre question est un excellent exemple de pourquoi de nombreux envisager d'utiliser côté client bibliothèques comme jQuery, YahooUI, MooTools, Dojo, etc. Avec l'essor d'une communauté, les personnes de talent et le soutien d'une société de projets comme ceux-ci vous permettent de vous concentrer sur votre application plutôt que sur ces questions.

Voici quelques jQuery exemples qui permettent d'éviter une grande partie de la croix-navigateur de frustration et peut vraiment faire tout cela ... amusant.

Croix-navigateur de la souris cliquez sur la liaison

$('#select anything + you[want=using] ~ css:selectors').click(
    function(){ 
       alert('hi');
    }
);

Croix-navigateur HTML Injection

$('#anElementWithThisId').html('<span>anything you want</span>');

Croix-navigateur Ajax (tous les objets de requête sont toujours disponibles pour vous)

$('p.message').load('/folder/file.html');

Et ce souffle vraiment de moi, de charger un sous-ensemble de données avec les sélecteurs (voir le manuel pour plus de détails)

$('p.message').load('/folder/file.html body p:first-child');

Maintenant, comment tout cela commence vraiment à s'amuser: le chaînage des méthodes

$('ul.menu a').click(           // bind click event to all matched objects
  function(evt){                // stnd event object is the first parameter
    evt.preventDefault();       // method is cross-browser thx to jquery
    $(this)                     // this = the clicked 'a' tag, like raw js
      .addClass('selected')     // add a 'selected' css class to it
      .closest('ul.menu')       // climb the dom tree back up to the ul
      .find('a.selected')       // find any existing selected dom children
      .not(this)                // filter out this element from matches
      .removeClass('selected'); // remove 'selected' css class
  }
)

Cela me rappelle Joël Pouvez Votre Langage de Programmation le Faire? l'article.

En prenant tout cela à un niveau théorique, le véritable progrès ne vient pas de ce que vous pouvez faire avec la pensée consciente et de l'effort, mais plutôt ce que vous pouvez faire automatiquement (sans pensée ou d'effort). Joel a un segment sur cette Puce Et Fait bouger les Choses concernant les questions d'entrevue et smart développeurs, complètement changé mon approche de la programmation.

Semblable à un pianiste qui peuvent "jouer" de la musique parce qu'elle sait toutes les clés, votre promotion ne vient pas de faire plus de choses qui demandent de la réflexion, mais plutôt plus de choses qui ne nécessitent pas de pensée. L'objectif devient alors de faire toutes les bases facile.. naturel.. subconscient.. afin que nous puissions tous geek sur notre niveau plus élevé objectifs.

Côté Client, les bibliothèques, dans un sens, nous aider à faire exactement cela. ;)

21voto

Daniel Lew Points 39063

La plupart des problèmes que j'ai sont avec IE, spécifiquement IE6. Problèmes que j'ai affaire personnelle, qui ont laissé une impression mémorable (dans aucun ordre particulier):

  • Avoir à utiliser des frameworks pour faire des choses de base, car chaque navigateur implémente les DOM un peu différemment. Cela est particulièrement odieux avec IE et de l'AJAX, ce qui nécessite plusieurs si-blocs juste pour obtenir de l'appel a commencé. Dans un monde idéal, je serais en mesure de travailler en JavaScript sans le cadre pour faire des choses de base.

  • onChange sur sélectionne dans IE sont mis en œuvre mauvaise, et le feu avant de le sélectionner perd le focus (ce qui est incorrect). Cela signifie que vous ne pouvez jamais utiliser onChange avec les sélectionne en raison de c'est à dire, depuis le clavier uniquement les utilisateurs seront paralysés par cette question de mise en œuvre.

  • Vous avez mentionné dans votre post, mais c'est un immense douleur quand IE attrape un élément par son nom lors de l'utilisation de getElementBy**Id**().

  • Lorsque, dans une RTL locale (arabe, hébreu, etc.), Firefox implémente "text-align: right;" de manière incorrecte. Si le conteneur des débordements pour une raison quelconque, le texte s'aligne sur le côté droit de la partie visible du conteneur, plutôt que le côté droit du conteneur lui-même (même si elle fait partie de l'invisible).

  • Les différents navigateurs ont des niveaux d'pickiness quant à la façon dont vous fin les tableaux et les objets. Par exemple, Firefox est plus que correct avec un tableau comme ceci: [ item0, item1 ]". Toutefois, ce même code de l'Opéra de barf car il déteste la virgule. IE va faire le tableau d'un trois-élément de tableau, avec le troisième élément indéfini! C'est un mauvais code pour sûr, mais il y a été généré dynamiquement en javascript, j'ai travaillé à qui a été un énorme douleur à la réécriture - ce que ce serait bien si cela fonctionne simplement.

  • Tout avoir à faire avec IE hasLayout. Tellement horrible douleur a tourné autour de cet attribut, surtout quand je ne savais pas qu'il existait. Ainsi, de nombreux problèmes résolus en utilisant des hacks pour ajouter hasLayout. De plus en plus de problèmes créés suite à des hacks.

  • Flotte dans IE fonctionnent rarement de la façon dont vous l'espoir qu'ils font. Ils ont également tendance à être ennuyeux dans d'autres navigateurs, mais elles ont au moins se conformer à un comportement particulier. ;)

  • IE l'ajout d' espace blanc entre les éléments de la liste m'a causé de la douleur, depuis YUI utilise des listes de rendre leur menus. (Pour bien comprendre la question, vous avez pour afficher le lien dans IE et un autre navigateur de l'autre côté.)

  • J'ai beaucoup de problèmes à obtenir un texte de ne pas enrouler dans des récipients en IE. Les autres navigateurs écouter "white-space: nowrap" beaucoup mieux. Cela a été un problème avec une INTERFACE utilisateur, j'ai travaillé sur qui a un redimensionnable barre latérale; dans IE, la barre latérale éléments vont commencer à envelopper si vous redimensionnez trop.

  • Le manque de beaucoup de sélecteur CSS types dans IE6 signifie que vous avez à la classe de votre DOM plus que nécessaire. Par exemple, le manque de +, :hover, :first-child.

  • Les différents navigateurs traiter vide les nœuds de texte différemment. Plus précisément, lors de la traversée du DOM avec l'Opéra, j'ai à vous soucier de texte vide nœuds lors de la navigation des enfants d'un nœud. Ce n'est pas un problème si vous êtes à la recherche d'un élément particulier, mais c'est que si vous écrivez du code qui attend une entrée particulière et la manière dont le navigateur de vues de l'entrée diffère.

  • Dans IE6, quand vous générer dynamiquement une iframe, via javascript, iframe, parfois, de ne pas remplir son récipient automatiquement (même avec la largeur et la hauteur réglée au maximum). Je ne sais toujours pas comment résoudre ce problème, et ont pensé à poster une question à ce sujet.

  • Dans IE, vous ne pouvez pas définir de dépassement de CSS sur le <tbody> élément. Cela signifie que des listes déroulantes (avec un béton <thead> et <tfoot>) sont impossible à faire de manière simple.

Je vais sans doute ajouter à cette liste plus tard, car (pour moi) le pire de développement web sont de la croix-problèmes de navigateur. Aussi, je doute que je vais jamais modifier le "je vais sans doute ajouter à cette liste plus tard", étant donné que ces problèmes sont infinies. :)

10voto

bobince Points 270740

IE6? Meh. Les gars, vous avez eu facile! Vous n'avez jamais eu à faire de mise en page CSS travailler dans Netscape 4 (sans se planter le navigateur entier)? Vous n'avez jamais eu à écrire pour appareil navigateurs qui ne supportent pas les tables? Vous n'avez jamais eu à écrire pour IE Mobile?

  • il n'y a pas de prise en charge de JavaScript attribué gestionnaires d'événements; vous ne pouvez écrire un gestionnaire d'événement à travers la mise en "onclick="somestring"" dans innerHTML;

  • la plupart de base DOM Niveau 1 propriétés (par exemple. nodeName, nodeType, nodeValue, firstChild, lastChild, nextSibling, previousSibling, les données, la valeur, la HTMLElement.getElementsByTagName, tous les HTMLTableElement membres, la plupart des CSSStyleDeclaration membres) n'existent tout simplement pas;

  • la plupart des propriétés de mise en page CSS ne fonctionnent pas; beaucoup tout simplement propriétés CSS comme ‘largeur' ne fonctionnent pas sur certains éléments, tels que des champs de formulaire;

  • réglage de nombreuses autres propriétés CSS sur des éléments comme les tables et les champs de formulaire provoque instantanément un navigateur hang, qui, depuis Windows Mobile n'a pas intégré dans le gestionnaire des tâches, des moyens que vous avez à faire une réinitialisation logicielle de l'appareil;

  • oh, et de mettre n'importe quoi mais le texte à l'intérieur d'un <button> est insta-crash trop;

  • d'énormes morceaux de code JavaScript de base des méthodes et des "DOM Niveau 0" méthodes en remontant aussi loin que Netscape 2 (!) sont manquants.

Et c'est le plus up-to-date de release de Microsoft phare de Windows navigateur Mobile en 2009.

Bien sûr, il prend en charge XMLHttpRequest, mais l'écriture de code AJAX sur un navigateur dont les CSS et javascript support est inférieure à IE3 (!) est bizarrement schizophrène, comme vous travaillez avec un étrange amalgame de 21e siècle et au 19ème siècle, les technologies de l'.

Je ne le recommande pas.

5voto

annakata Points 42676

Cela fait trop longtemps que j'ai beaucoup de problèmes, mais cela me rend tout de même fou: je dois pirater le non support de IE pour des choses CSS comme display: table,: last-child et: survoler hors des ancres.

Tous les trucs d'IE sont toujours fous, mais c'est juste la folie du fond maintenant :)

3voto

tj111 Points 12313

Dans Internet Explorer, si vous créez des éléments de formulaire à l'aide de document.createElement , le champ ne sera pas soumis avec le formulaire. La seule solution consiste à utiliser

 element.innerHTML = "<input type='text' value="+val+" name="+name+">";
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X