Android écran du navigateur.largeur de l'écran.hauteur & de la fenêtre.innerWidth & de la fenêtre.innerHeight ne sont pas fiables
Je travaille sur une application web qui est destiné aux navigateurs sur ordinateur, tablette et smartphone.
L'application web a une boîte à lumière mis en œuvre à l'aide de Colorbox avec un iframe
. Lorsque la fenêtre du navigateur est redimensionnée ou la tablette/téléphone a changé d'orientation, du code Javascript interroge les dimensions de la fenêtre de sorte qu'il peut redimensionner certains éléments de la boîte à lumière.
La question que je vais avoir, c'est que tout fonctionne bien sur le bureau (Windows: internet explorer, Firefox, Chrome, Mac: Safari), iPad & iPhone, mais pas sur les smartphones Android (HTC) et l'Émulateur Android.
Android retourne toujours des valeurs différentes pour screen.width
, screen.height
, window.innerWidth
& window.innerHeight
lorsqu'elles sont interrogées à partir de l'intérieur de la fenêtre de redimensionnement de l'événement, qui se déclenche plusieurs fois.
Pourquoi le navigateur Android restitution de ces une large variation dans les valeurs et comment puis-je détecter de manière fiable la largeur et la hauteur de la fenêtre du navigateur?
- Il n'y a aucun moyen fiable (encore). Cependant, l'écoute de redimensionner et d'attendre un peu (100) millisecondes est généralement suffisant pour les propriétés à définir correctement dans 99% du temps. Il est également important de définir la fenêtre d'affichage et la cible dpi balises meta.
Vous devez vous connecter pour publier un commentaire.
Sur Android, fenêtre.outerWidth et de la fenêtre.outerHeight sont fiable de la taille de l'écran. Selon votre version d'Android, innerWidth/Hauteur est généralement incorrect.
Voici une très bonne writeup sur la situation.
Ci-dessous, c'est la différenciation sur la base des relevés avec Samsung Tab sous Android 4.1
barre de titre
et la barre d'adresse(si visible)
hauteur de la barre, (peu importe la barre d'adresse est visible ou caché, outerHeight
inclure l'adresse de la hauteur de la barre.)
Je suis en utilisant ce travail pour qu'elle entre ios et android.
Je m'a pris des heures pour trouver une solution de contournement.
La seule constante chez
window.innerHeight
,window.outerheight
, etc, c'étaitscreen.height
.Ce code m'a donné l'outerheight:
Aussi, afin de prendre en charge les anciennes versions d'android, placez votre code dans un
setTimeout
J'espère que cela est utile =)
Essayer cela, et de vérifier votre lecture sur mobile
Il doit correspondre à la taille de l'écran (hauteur) de votre téléphone cahier des charges.
Dan la réponse de fixer le inconcistancy entre android du navigateur..
donc je post comment j'détecter/changer de mobile fenêtre d'affichage et l'adapter lors de la rotation
(ne sais pas si utilisable pour n'importe quelle...
Dans mon cas, le setTimeout crochet n'était pas utile.
Après quelques recherches, je découvre que les différentes versions d'Android (et périphériques) ont différents devicePixelRatio valeurs.
Si le devicePixelRatio est égal ou supérieur à 1, le nombre réel de pixels de l'écran (pour le code html de la page point de vue) est donnée par la fenêtre.de l'écran.largeur (ou hauteur...).
Mais, si la fenêtre.de l'écran.la largeur est inférieure à 1 (il arrive dans certains vieux appareils Android), le nombre réel de pixels devient: fenêtre.de l'écran.largeur/devicePixelRatio.
Donc, vous avez juste à faire face à cette.