浏览器在尝试创建渲染上下文时是否会抛出错误?

时间:2016-04-18 06:42:49

标签: javascript canvas browser cross-browser

以下代码是否会抛出错误?

var canvas = document.createElement("canvas");

var ctx = canvas.getContext("somethingwrong");

在铬中,它只返回null。

如果浏览器知道请求的渲染上下文,会怎么样? (比如“webgl”或“experimental-webgl”)是否存在错误异常的可能性?在铬中,我无法引发这种行为。

换句话说:我是否需要将此代码包装在库中的try / catch中,以便干净地检查渲染上下文?

有没有办法可以客观化这个?例如。通过Web服务尝试在不同浏览器中剪切的代码并列出它们可能不同的结果。

1 个答案:

答案 0 :(得分:1)

如果请求的上下文不可用,或者画布已经分配给不同类型的上下文,则返回nullexpected behavior

  

如果画布不支持给定的上下文ID,则返回null   已经使用其他上下文类型初始化(例如尝试   获得“webgl”上下文后得到“2d”上下文。

在某些特殊情况下,可能会抛出与代理方案相关的异常(同上):

  

InvalidStateErrorsetContext()会引发transferControlToProxy()例外   已使用null种方法。

除此之外,即使浏览器可能支持某种类型的上下文,但如果系统资源(如内存)较低,则无法保证可以创建该对象,在这种情况下将返回try-catch

Here is an overview 将在不同(常见)方案中返回的内容。

http://i.imgur.com/zqeZxv8.png

因此,除非您使用代理转移(目前尚未得到广泛支持),否则您无需将getContext()probablySupportsContext()一起使用。

提示:将来,canvas会获得一个属性getContext(),可以在false之前使用。如果不满足条件,这将执行这些测试并返回var supported = canvas . probablySupportsContext(contextId [, ... ] ) (支持的上下文,已经在使用不同的上下文类型,低资源等):

getContext()
  

如果使用相同的参数调用north = double.Parse(coord1, CultureInfo.InvariantCulture); east = double.Parse(coord2, CultureInfo.InvariantCulture); ,则返回false   肯定会返回null,否则返回true。

更新只是想详细说明一个特殊情况 - 对于供应商特定的扩展,理论上可以根据非常具体的扩展来获取异常以及如何定义其行为。但这些是并且不应该被认为是标准的一部分,因为它们在大多数情况下都是实验性的,所以暗示了风险和非标准行为。