以下代码是否会抛出错误?
var canvas = document.createElement("canvas");
var ctx = canvas.getContext("somethingwrong");
在铬中,它只返回null。
如果浏览器知道请求的渲染上下文,会怎么样? (比如“webgl”或“experimental-webgl”)是否存在错误异常的可能性?在铬中,我无法引发这种行为。
换句话说:我是否需要将此代码包装在库中的try / catch中,以便干净地检查渲染上下文?
有没有办法可以客观化这个?例如。通过Web服务尝试在不同浏览器中剪切的代码并列出它们可能不同的结果。
答案 0 :(得分:1)
如果请求的上下文不可用,或者画布已经分配给不同类型的上下文,则返回null
是expected behavior:
如果画布不支持给定的上下文ID,则返回
null
已经使用其他上下文类型初始化(例如尝试 获得“webgl”上下文后得到“2d”上下文。
在某些特殊情况下,可能会抛出与代理方案相关的异常(同上):
InvalidStateError
或setContext()
会引发transferControlToProxy()
例外 已使用null
种方法。
除此之外,即使浏览器可能支持某种类型的上下文,但如果系统资源(如内存)较低,则无法保证可以创建该对象,在这种情况下将返回try-catch
。
Here is an overview 将在不同(常见)方案中返回的内容。
因此,除非您使用代理转移(目前尚未得到广泛支持),否则您无需将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。
更新只是想详细说明一个特殊情况 - 对于供应商特定的扩展,理论上可以根据非常具体的扩展来获取异常以及如何定义其行为。但这些是并且不应该被认为是标准的一部分,因为它们在大多数情况下都是实验性的,所以暗示了风险和非标准行为。