最近、開発中のサイトでWebGLの使用を開始しました。これは拡張機能として使用されており、WebGLがサポートされていないかエラーがある場合、サイトはキャンバスレンダリングにフォールバックします。
残念ながら、Google ChromeでWebGL例外が発生すると、エラーメッセージバーが表示されます。このバーは、ユーザーが操作するまで消えません。再読み込みしたり、別のページに移動したりすると、次にサイトがWebGLを使用しようとしたときにメッセージが再表示されます。
私のサイトの場合、これは、各ページがWebGLを使用しようとするため、WebGLエラーメッセージが消えることがないことを意味します。エラーが発生するとChromeは、ユーザーがReloadと指示するまで、同じサイトでWebGLを再度使用しないため、継続的なエラーメッセージは実際には継続的であることを示しません。エラー、WebGLを使用しようとする継続的な試み。
WebGLエラーが発生すると、次のコマンドを実行するだけで、このダイアログをそのサイトに再現できます。
document.createElement('canvas').getContext('experimental-webgl');
これは例外を発生させません、そして私の.onerror
canvas要素のメソッドが呼び出されませんでした。
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()
この問題を解決するのに何年もかかりました-ネズミのようです! Chromeを使用しているときに、それに基づいた3Dコンテキストを持つキャンバスのサイズを変更するとエラーが発生しました。解決策は、リスナーを介してサイズ変更をキャッチし、その時点でキャンバスとコンテキストを再作成することでした。お役に立てば幸いです。