Android Native Browser duplicate HTML5 canvas (fine en chrome)

C'est un problème étrange que je ne connais que sur un navigateur natif sur Samsung Galaxy Tab 2 et Galaxy S2 dans le navigateur natif.

Cela a également été testé sur d'autres téléphones et tablettes Android, tels que le Nexus 7 et Galaxy S4, mais leur navigateur natif est chromé, donc il semble bien. Ce problème n'est pas également présent sur les navigateurs IOS, les navigateurs Windows Desktop ou les navigateurs Mac Desktop.

C'est presque quand la page Web est chargée deux fois sur elle-même!

Comme il existe un élément de canevas en double, cela se met à jour comme le fait la toile principale.

Entrez la description de l'image iciEntrez la description de l'image ici

Ici, il apparaît que cela ne se produit que lorsqu'il est tourné en mode paysage, mais je pense que, en mode portrait, le canevas est parfaitement aligné sur le dessus.

Ce qui est encore plus étrange, le bouton de menu que vous voyez est un bouton de basculement, appuyez sur pour ouvrir le menu, appuyez sur pour fermer le menu. Sur cet appareil lorsque vous appuyez dessus, il s'ouvre et se ferme instantanément. Il en va de même pour le bouton à sourdine basculer.

Je suis complètement en perte.

J'ai fait quelques débogotes javascript en lançant quelques alertes ici et là, et les fonctions d'initialisation qui créent des références sur le canevas, etc., ne sont appelées qu'une seule fois.

J'ai lu et entendu parler de l'accélération du matériel causant des problèmes, mais les solutions que j'ai trouvé potentiellement ne sont que relatives à la création d'applications natives! Pas les pages Web HTML5 Canvas.

Un aperçu de cela pourrait être serait génial! Merci d'avance.

–MODIFIER

J'ai également mis cette alert(document.getElementsByTagName('canvas').length); test alert(document.getElementsByTagName('canvas').length); Pour voir s'il y avait 2 toiles dans le DOM mais il renvoie 1!

J'ai rencontré ce même problème. J'ai réussi à corriger cela en exécutant le code suivant après avoir changé mon canevas:

 // If Samsung android browser is detected if (window.navigator && window.navigator.userAgent.indexOf('534.30') > 0) { // Tweak the canvas opacity, causing it to redraw $('canvas').css('opacity', '0.99'); // Set the canvas opacity back to normal after 5ms setTimeout(function() { $('canvas').css('opacity', '1'); }, 5); } 

En modifiant l'opacité, cela a obligé la toile à redessiner et à supprimer les formes en double. C'est une solution stupide, mais ça marche. Espérons que cela aide quelqu'un.

Aussi, vous pouvez regarder ces collections de ces conseils: http://slash-system.com/fr/how-to-fix-android-html5-canvas-issues/

Pour un problème de double toile, il y a un bug connecté https://code.google.com/p/android/issues/detail?id=35474, vous voudrez peut-être vérifier les solutions proposées.

Dans mon cas, ce problème n'est apparu que si j'avais activé le rendu Force GPU.

Le problème apparaît habituellement si vous avez un élément parent pour une toile qui a un overflow: hidden CSS overflow: hidden

Supprimer la propriété de débordement de tous les parents de toile, probablement nous n'avons pas besoin de cette propriété sur les appareils tactiles:

 $("canvas").parents("*").css("overflow", "visible"); 

Il est bien expliqué à http://slash-system.com/fr/how-to-fix-android-html5-canvas-issues/