Подавление "крыс! WebGL поражает". панель ошибок в Google Chrome

Недавно я начал использовать WebGL на сайте, который я разрабатываю. Он используется как усовершенствование, и сайт возвращается к рендерингу холста, если WebGL не поддерживается или имеет ошибку.

К сожалению, когда в Google Chrome возникает исключение WebGL, появляется панель сообщений об ошибках. Этот бар не исчезает, пока пользователь не взаимодействует с ним. Если они перезагрузятся или перейдут на другую страницу, сообщение снова появится в следующий раз, когда сайт попытается использовать WebGL.

В случае моего сайта это означает, что сообщение об ошибке WebGL никогда не исчезнет, ​​потому что каждая страница пытается использовать WebGL. Как только произошла ошибка, Chrome не будет использовать WebGL снова на том же сайте, пока пользователь не сообщит об этом Reload, поэтому сообщение о непрерывной ошибке на самом деле не указывает на непрерывные ошибки, а просто на попытки использовать WebGL.


После возникновения ошибки WebGL этот диалог можно воспроизвести на этом сайте, просто выполнив:

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

Это не вызывает никаких исключений, и мой метод .onerror в элементе canvas не был вызван.

Мне не удалось исследовать это слишком глубоко, потому что я не смог достоверно воспроизвести ошибку WebGL. (Даже если бы я мог воспроизвести один на своем компьютере, он не может воспроизводиться на других.)


Такое поведение было бы разумным для сайта, который полагался на WebGL, но мой не делает этого, поэтому сообщение просто отвлекает и запутывает пользователей.

Есть ли способ подавить это сообщение об ошибке? Я не против возвращаться к поведению Ignore, когда WebGL отключен после возникновения ошибки.

Ответ 1

Если вы хотите игнорировать исключение, тогда должно быть достаточно.

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

Если вы хотите повторить загрузку контекста webgl

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

ИЗМЕНИТЬ:

Если вы хотите проверить правильность обработки контекста, используйте расширение WEBGL_lose_context в контексте webgl.

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

Ответ 2

У меня возникло желание решить эту проблему - кажется, что крысы! ошибка возникла при изменении размера холста, который имел 3D-контекст, основанный на нем при использовании Chrome. Решение состояло в том, чтобы поймать изменение размера через слушателя и воссоздать холст и контекст в этой точке. Надеюсь, что это поможет.

Ответ 3

"Крысы! Ошибка WebGL Hit A Snag'может появляться в Google Chrome при просмотре через определенные сайты, например, Youtube, Facebook или любой другой сайт.

Ответ 4

Эту проблему можно решить, отключив WebGL в браузере Chrome. Если это не сработает, попробуйте отключить аппаратное ускорение.

Вы можете проверить этот блог "https://geekermag.com/chrome-rats-webgl-hit-a-snag/" подробные инструкции