2013-08-21 5 views
12

Niedawno zacząłem używać WebGL w witrynie, którą rozwijam. Jest używany jako rozszerzenie, a witryna powraca do renderowania kanwy, jeśli WebGL nie jest obsługiwany lub występuje błąd.Tłumienie "Szczurów! WebGL uderzyło w przeszkodę". pasek błędów w przeglądarce Google Chrome

Niestety, gdy wystąpi wyjątek WebGL w przeglądarce Google Chrome, pojawi się pasek komunikatu o błędzie. Pasek ten nie znika, dopóki użytkownik nie wejdzie z nim w interakcję. Jeśli przeładują lub przejdą na inną stronę, wiadomość pojawi się ponownie, gdy witryna spróbuje użyć WebGL.

W przypadku mojej strony oznacza to, że komunikat o błędzie WebGL nigdy nie odejdzie, bo każda strona próbuje użyć WebGL. Gdy wystąpi błąd, Chrome nie będzie ponownie używał WebGL w tej samej witrynie, dopóki użytkownik nie przekaże go do Ponownie załaduj, więc ciągły komunikat o błędzie w rzeczywistości nie wskazuje ciągłych błędów, tylko ciągłe próby użycia WebGL.


Po wystąpieniu błędu WebGL, to okno dialogowe może być powielana w tym miejscu po prostu przez uruchomienie:

document.createElement('canvas').getContext('experimental-webgl'); 

To nie budzi żadnych wyjątków, a mój .onerror metoda na elemencie canvas nie był nazywa.

Nie byłem w stanie zbadać tego zbyt głęboko, ponieważ nie byłem w stanie wiarygodnie odtworzyć błędu WebGL. (Nawet jeśli mogę odtworzyć jeden na moim komputerze, to nie może być powtarzalna od innych.)


Takie zachowanie byłoby rozsądne dla strony, która oparła się na WebGL, ale kopalnia nie robi, więc wiadomość jest tylko rozpraszające i mylące dla użytkowników.

Czy istnieje sposób na powstrzymanie tego komunikatu o błędzie? Nie mam nic przeciwko wycofaniu się do zachowania polegającego na ignorowaniu WebGL po wystąpieniu błędu.

+0

FYI wiele stron ma taki problem, jak kariera w SO lub CNBC. Zdarza się to na moim Samsungie s3, ale nie na moim motocyklu RAZR maxx hd – Bob

Odpowiedz

6

Jeśli chcesz zignorować wyjątek, następujące rzeczy powinny wystarczyć.

canvas.addEventListener("webglcontextlost", function(e) { e.preventDefault(); Stopdrawing(); }, false); 

Jeśli chcesz, aby ponowić próbę ładowania kontekście WebGL

canvas.addEventListener("webglcontextrestored", function (event) {initializeResources(); }, false); 

EDIT:

Jeśli chcesz sprawdzić, czy kontekst się prawidłowo obsługiwane następnie skorzystać z rozszerzeniem WEBGL_lose_context na WebGL kontekst.

gl.getExtension("WEBGL_lose_context").loseContext() 
gl.getExtension("WEBGL_lose_context").restoreContext() 
+0

Dzięki, dam to zdjęcie następnym razem, gdy powtórzę błąd. –

+3

Nie mogę wykonać tej pracy.OpenGL nadal wydaje mi regularnie wyjątek RATS. – pip

2

Zajęło mi wieki, aby rozwiązać ten problem - wydaje się, że szczury! wystąpił błąd podczas zmiany rozmiaru płótna, na którym oparto kontekst 3D oparty na przeglądarce Chrome. Rozwiązaniem było złapanie rozmiaru przez słuchacza i odtworzenie obrazu i kontekstu w tym momencie. Nadzieja, która pomaga.

Powiązane problemy