2013-08-21 26 views
12

我最近開始在我正在開發的網站上使用WebGL。它被用作增強功能,如果WebGL不受支持或出現錯誤,該網站將回退到畫布渲染。壓制「Rats!WebGL遇到障礙」。 Google Chrome中的錯誤欄

不幸的是,當谷歌瀏覽器發生WebGL異常時,會出現一個錯誤消息欄。該欄不會消失,直到用戶與之交互爲止。如果他們重新加載或導航到不同的頁面,該消息將在下次網站嘗試使用WebGL時重新出現。

在我的網站的情況下,這意味着,因爲每個頁面嘗試使用WebGL的WebGL的錯誤信息永遠不會消失。一旦發生錯誤,Chrome將不會在同一網站上再次使用WebGL,直到用戶告知其重新加載,因此連續錯誤消息實際上並不表示連續錯誤,只是連續嘗試使用WebGL。


一旦WebGL的錯誤發生時,這個對話框可以在該網站上只運行重現:

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

這不會引發任何異常,我.onerror canvas元素的方法是不調用。

我還沒有能夠深入調查,因爲我無法可靠地重現WebGL錯誤。 (即使我能複製我的計算機上的一個,它可能不會在別人重複的。)


這種行爲是合理的,關於WebGL的依靠一個網站,但我沒有,所以消息只是讓用戶分心和困惑。

有什麼辦法可以壓制這個錯誤信息嗎?我不介意回到忽略發生錯誤時禁用WebGL的行爲。

+0

僅供參考很多網站都有像SO職業或CNBC這樣的問題。它發生在我的三星s3上,但不是我的摩托RAZR maxx hd – Bob

回答

6

如果你想忽略異常,那麼下面的應該就足夠了。

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() 
+0

謝謝,下次再次出現錯誤時,我會給出一個答案。 –

+3

我似乎無法完成這項工作。OpenGL似乎仍經常給我RATS例外。 – pip

2

花了我好幾個時間來解決這個問題 - 看起來老鼠!使用Chrome時,在調整具有基於3D上下文的畫布的大小時出現錯誤。解決方案是通過偵聽器捕獲調整大小,然後重新創建畫布和上下文。希望有所幫助。