返回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)。我会说,这是一个常规事件,这被定义为“......错误”。但请,有人纠正我,如果我在这里错了, –