2013-08-16 11 views
13

To jest dziwny problem, który mam tylko w przeglądarce macierzystej na tabletach Samsung Galaxy Tab 2 i Galaxy S2 w macierzystej przeglądarce.Natywna przeglądarka systemu Android powielanie płótna HTML5 (w porządku w chromie)

Zostało to również przetestowane na innych telefonach i tabletach z Androidem, takich jak Nexus 7 & Galaxy S4, ale ich natywna przeglądarka jest chromowana, więc wydaje się być w porządku. Ten problem nie występuje również w przeglądarkach IOS, przeglądarkach Windows Desktop i przeglądarkach Mac Desktop.

To prawie tak, jak strona jest ładowana dwa razy z góry!

Ponieważ istnieje duplikat elementu canvas, który aktualizuje się tak, jak robi to główne płótno.

enter image description here enter image description here

Tutaj wydaje asthough to tylko dzieje się, gdy obraca się w trybie poziomym, jednak wierzę, że w trybie portretowym, płótno są idealnie dopasowane na górze.

Co jest jeszcze dziwniejsze, przycisk menu, który widzisz to przycisk przełącznika, dotknij, aby otworzyć menu, dotknij, aby zamknąć menu. Na tym urządzeniu po dotknięciu otwiera się i zamyka natychmiast. to samo dzieje się w przypadku przełączania przycisku wyciszenia.

Jestem kompletnie zagubiony.

Zrobiłem kilka debugowania javascript rzucając kilka alertów tu i tam, a funkcje inicjalizacyjne, które tworzą odniesienia do płótna i tak dalej, są wywoływane tylko raz.

Przeczytałem i słyszałem o przyspieszaniu sprzętowym powodującym problemy, ale rozwiązania, które udało mi się znaleźć, odnoszą się tylko do budowania natywnych aplikacji! nie stron internetowych w kanale HTML5.

Wszelkie informacje na ten temat mogą być przydatne! Z góry dzięki.

--edit

ja również umieścić w tym teście alert(document.getElementsByTagName('canvas').length);, aby zobaczyć, czy nie było 2 płótno w DOM ale zwraca 1!

+0

Co powiesz na sprawdzenie aplikacji użytkownika Samsunga, a następnie usunięcie drugiej. Jestem zdezorientowany, jeśli to możliwe, ponieważ długość wynosi 1 tagu canvas. – Adrian

+0

Proszę podać [SSCCE] (http://sscce.org/) problemu, wtedy możemy zobaczyć źródło i spróbować na innych urządzeniach. – Pool

+0

@Pool Right, ponieważ każdy nie ma urządzenia Samsung, masz na myśli jakąś sztuczkę. Próbowałem ostatnio symulatora IOS w Win7 poprzez Webmatrix i nie udało mi się pokazać mi błędu podobnego do problemu znalezionego w tym pytaniu. – Adrian

Odpowiedz

11

Wpadłem na ten sam problem. Udało mi się rozwiązać ten problem poprzez uruchomienie następujący kod po wprowadzeniu zmian do mojego płótnie:

// 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); 

} 

przez szczypanie krycie, to zmuszony płótno na przerysowanie i usuwa duplikaty kształtów. To durna poprawka, ale działa. Mam nadzieję, że to pomoże komuś.

+0

To nie rozwiązuje problemu dla mnie, płótno wciąż jest powielane. Ponadto istnieje już setTimeout z uruchomioną funkcją aktualizacji 30 razy na sekundę, która przerysowuje całe płótno. – rorypicko

+0

Spróbuj umieścić ten kod u dołu swojej funkcji aktualizacji setTimeout. – rickdmer

+0

dzięki! to działa! jedynym problemem jest to, że teraz działa jeszcze wolniej na tych starych urządzeniach. No cóż! Szkoda, że ​​nie ma lepszej pracy, ponieważ buduję teraz tylko prostą grę opartą na menu i dramatycznie ją spowalnia (nie była to świetna wydajność na tym urządzeniu)! – rorypicko

1

W przypadku podwójnego problemu z płótnem istnieje błąd z logowaniem https://code.google.com/p/android/issues/detail?id=35474, możesz sprawdzić sugerowane rozwiązania.

W moim przypadku problem pojawił się tylko wtedy, gdy włączono renderowanie Force GPU.

Problem zwykle pojawia się, jeśli masz jakiś element nadrzędny na płótnie, który ma CSS overflow: hidden

Powiązane problemy