返回null
是expected behavior如果請求的情況下不可用,還是在畫布已經被分配到不同類型的上下文:如果給定上下文ID不支持
返回null
,如果畫布 已經用其他上下文類型初始化(例如,在獲得「webgl」上下文後嘗試 以獲取「2d」上下文)。
有特殊情況下的異常可能拋出相關的代理方案(同上):
拋出一個InvalidStateError
異常,如果已經使用了setContext()
或 transferControlToProxy()
方法。
除此之外,即使瀏覽器可以支持特定類型的上下文沒有保證的是,如果系統資源,例如存儲器是低在這種情況下null
將被返回的對象可以被創建。
Here is an overview將在不同(常見)情況下返回的內容。
所以,除非你正在使用代理轉移(這不正是廣泛支持在這個時候),你不需要使用try-catch
與getContext()
。
提示:未來畫布將獲得一個屬性probablySupportsContext()
,它可以在getContext()
之前使用。這將做這些測試並返回false
如果條件不滿足(支持的背景下,已經在不同的上下文類型,低資源等使用):
var supported = canvas . probablySupportsContext(contextId [, ... ])
返回FALSE如果調用getContext()
具有相同的參數會 肯定返回null,否則返回true。
更新只是想闡述一個特例 - 特定擴展它在理論上可能獲得取決於非常特定的擴展,以及它如何定義自己的行爲引發的異常供應商。但是這些不應該被視爲標準的一部分,並且由於它們在大多數情況下都是實驗性的,所以隱含了風險和非標準行爲。
來源
2016-04-18 09:15:30
K3N
是的,對我來說它看起來也是這樣。但可能有一個瀏覽器支持「2D」上下文,而沒有其他的。但即使禁用webgl,我也會返回null作爲返回值。創建時,我不確定是否可能有異常,因爲document.createElement(「something」)對我來說沒有異常返回undefined。 –
不是一個笨蛋,但相關,http://stackoverflow.com/questions/36565598/webglcontextcreationerror-event-is-it-triggered-synchronously/36566263#36566263此外,這個事件確實存在的事實意味着是的,瀏覽器**可以**拋出一個錯誤。 – Kaiido
感謝您的鏈接。我知道「webglcontextcreationerror」事件。我不是百分之百確定這裏的術語,但我認爲這並不是拋出一個錯誤,因爲我無法在另一個地方看到它(用try/catch)。我會說,這是一個常規事件,這被定義爲「......錯誤」。但請,有人糾正我,如果我在這裏錯了, –