web-dev-qa-db-ja.com

「Rats!WebGLが問題にぶつかった」を抑制します。 GoogleのエラーバーChrome

最近、開発中のサイトでWebGLの使用を開始しました。これは拡張機能として使用されており、WebGLがサポートされていないかエラーがある場合、サイトはキャンバスレンダリングにフォールバックします。

残念ながら、Google ChromeでWebGL例外が発生すると、エラーメッセージバーが表示されます。このバーは、ユーザーが操作するまで消えません。再読み込みしたり、別のページに移動したりすると、次にサイトがWebGLを使用しようとしたときにメッセージが再表示されます。

私のサイトの場合、これは、各ページがWebGLを使用しようとするため、WebGLエラーメッセージが消えることがないことを意味します。エラーが発生するとChromeは、ユーザーがReloadと指示するまで、同じサイトでWebGLを再度使用しないため、継続的なエラーメッセージは実際には継続的であることを示しません。エラー、WebGLを使用しようとする継続的な試み。


WebGLエラーが発生すると、次のコマンドを実行するだけで、このダイアログをそのサイトに再現できます。

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

これは例外を発生させません、そして私の.onerrorcanvas要素のメソッドが呼び出されませんでした。

WebGLエラーを確実に再現できなかったため、これを深く調査することはできませんでした。 (自分のコンピューターで再現できたとしても、他の人では再現できない場合があります。)


この動作は、WebGLに依存しているサイトにとっては合理的ですが、私の場合はそうではないため、メッセージはユーザーの気を散らして混乱させるだけです。

このエラーメッセージを抑制する方法はありますか?エラーが発生したら、WebGLを無効にする無視動作にフォールバックしてもかまいません。

例外を無視したい場合は、以下で十分です。

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

Webglコンテキストのロードを再試行する場合

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

編集:

コンテキストが正しく処理されるかどうかをテストする場合は、webglコンテキストでWEBGL_lose_context拡張機能を使用します。

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

この問題を解決するのに何年もかかりました-ネズミのようです! Chromeを使用しているときに、それに基づいた3Dコンテキストを持つキャンバスのサイズを変更するとエラーが発生しました。解決策は、リスナーを介してサイズ変更をキャッチし、その時点でキャンバスとコンテキストを再作成することでした。お役に立てば幸いです。

2
Chris O