En testant récemment une application Web sur des navigateurs de bureau Windows/Mac, puis sur un iPad, j'ai remarqué diverses différences dans Safari auxquelles je ne m'attendais pas. même si la version # est la même.
Je voudrais composer une liste de ces différences (pour moi et pour les autres) à avoir comme référence pour les développeurs.
par exemple dans Safari sur l'iPad
position:fixed
comme Safari de bureau <iOS 5Prompt('long message...','default');
n'affiche qu'une seule ligne du message (bien qu'il fournisse le défilement du messageJ'ai entendu dire par d'autres que certains JavaScript ne fonctionne pas, etc., etc., mais je ne l'ai pas encore entièrement testé, je serais donc reconnaissant pour toutes les découvertes que vous pourriez avoir rencontrées.
Un peu plus pour vous:
En général. Traitez-le comme un iPhone agrandi, pas un ordinateur de bureau réduit.
Safari sur iPad a le même problème avec la largeur/le rembourrage des boutons que sur l'iPhone
l'iPhone <button> padding immuable? décrit ce problème et une solution pour supprimer le padding sur un bouton avec du texte, mais cela ne vous aide pas si vous voulez qu'un bouton soit plus étroit que le padding lui-même (par exemple pour un bouton qui ne comporte qu'une petite icône). Pour ce faire, j'ai dû entourer le bouton d'un élément extérieur avec une largeur et un débordement définis: cachés comme ceci:
<span style="border: solid 1px blue; display: block; width: 16px; overflow: hidden">
<button style="-webkit-appearance: none; border-width: 0"> </button>
</span>
(la bordure bleue est pour montrer où est le bouton, ce n'est pas critique pour le hack)
le décalage () de jQuery ne fonctionne pas: http://bugs.jquery.com/ticket/6446
J'ai pensé que cela pourrait être utile: le guide d'Apple pour préparer du contenu Web pour l'iPad
Je viens d'être rattrapé par la position: problème fixe moi-même
Il semble également que l'iPad Safari rencontre des problèmes avec des éléments avec overflow:auto;
qui devrait donc afficher des barres de défilement ( page de test avec div et iframe ).
le navigateur iPad ne prend pas en charge le téléchargement de fichiers (même s'il le prend en charge, il sera inutile car l'iPad n'a pas de navigateur de fichiers standard). Le champ de fichier apparaît avec un bouton Choisir un fichier grisé.
l'iPad Safari semble avoir du mal à gérer les images d'arrière-plan dans de rares cas, montrant des lignes étranges de contenu de plus basse altitude.
Il n'y a pas grand-chose à ce sujet dans Google (pour l'instant).
Vous pouvez désormais contrôler le style des listes sélectionnées sur iOS en le réinitialisant avec -webkit-appearance: none;
Il semble y avoir un bug dans iPad Safari où un élément CSS avec à la fois une image d'arrière-plan et une couleur d'arrière-plan est rendu avec une légère bordure dans la couleur de la couleur d'arrière-plan. Il doit se remplir de l'image d'arrière-plan jusqu'au bord de l'élément rendu.
Je viens d'avoir le même bug sur mon site, en essayant de le visualiser sur un Ipad. La structure HTML est comme:
<div class="main"> <!-- background-color: white -->
<div class="left"></div> <!-- background-image: url(some_transparent_png) -->
<div class="content">...</div>
<div class="right"></div> <!-- background-image: url(some_transparent_png) -->
</div>
Le calque gauche utilise une image d'arrière-plan, tandis que le calque principal utilise uniquement une couleur d'arrière-plan. La vue Ipad montre une légère bordure au bord du calque gauche et droit.
Quand j'ajoute
-webkit-background-size: 100% 100%;
aux calques gauche et droit, la bordure disparaît.
À côté de ne prend pas en charge la barre de défilement dans TextAea, il semble que nous pouvons également utiliser javascript pour sélectionner automatiquement le texte dans TextArea. Ce code ne déplacera le curseur qu'à la fin du texte dans TextArea.
<div>
<textarea id="text-embed-code" autocapitalize="off" multiline="">
There is a fox running after chrome.
</textarea>
<button onclick="testSelectText(event);">select text</button>
</div>
<script>
function testSelectText(e) {
var box = document.getElementById("text-embed-code");
box.select();
e.preventDefault();
return false;
}
</script>
Je travaille actuellement sur une petite application Web réactive qui fait un usage intensif de l'API YouTube iframe. Apparemment, la version ipad de safari ne prend pas en charge quelques méthodes html5 que j'utilise beaucoup dans ce projet.
L'un d'eux est window.postMessage, qui est un moyen d'interagir avec des scripts sur d'autres pages, par exemple le script utilisé "dans" cet iframe. La lecture automatique des vidéos ne fonctionne pas non plus.
Les fichiers PNG transparents 24 bits AU-DESSUS D'UNE CERTAINE TAILLE DE FICHIER ne s'affichent pas sur l'iPad2.
Je peux cependant obtenir des rendus 8 bits de même dimension.
Je n'ai pas découvert quelle est cette taille de fichier maximale afin de les rendre à rendre.
Cette règle corrige le scintillement des animations dans Safari sur les appareils iOS:
body {-webkit-transform:translate3d(0,0,0);}
Il semble y avoir un bug dans iPad Safari où un élément CSS avec à la fois une image d'arrière-plan et une couleur d'arrière-plan est rendu avec une légère bordure dans la couleur de la couleur d'arrière-plan. Il doit se remplir de l'image d'arrière-plan jusqu'au bord de l'élément rendu.
Problèmes de trame. iPad Safari masquera les barres de défilement et étendra les cadres à la taille de leur contenu. Modification de la balise frame pour inclure scrolling="yes"
et noresize="noresize"
semble ne rien faire. Certains sites semblent bien sur tout, même un navigateur Dreamcast, mais pas sur iPad. Le problème peut être résolu en utilisant des tableaux et des iframes au lieu d'un frameset normal (cols et lignes, etc.).
position: fixed;
Ne fonctionne pas sur iOS 4 mais fonctionne sur iOS 5.
J'ai également découvert que contenteditable
n'est pas pris en charge dans les safaris mobiles, donc utiliser un simple textarea
est un meilleur pari. Apple Developer Docs