Html 检测画布是否已具有上下文

Html 检测画布是否已具有上下文,html,canvas,webgl,Html,Canvas,Webgl,给定画布,是否可以: 检测它是否已经有关联的2d或webgl上下文,而不调用getContext 或者在调用getContext时,确定返回的上下文是新创建的还是预先存在的 没有任何公开的文档化方法来检测从canvas元素请求了什么上下文。元素本身只是最终位图,不知道像素是如何进入的 我知道的唯一方法是破解getContext()调用以记录所请求的上下文(或者只制作一个您调用的普通包装函数而不是本机调用): //存储旧调用 HTMLCanvasElement.prototype.\u get

给定
画布
,是否可以:

  • 检测它是否已经有关联的
    2d
    webgl
    上下文,而不调用
    getContext
  • 或者在调用
    getContext
    时,确定返回的上下文是新创建的还是预先存在的

没有任何公开的文档化方法来检测从canvas元素请求了什么上下文。元素本身只是最终位图,不知道像素是如何进入的

我知道的唯一方法是破解
getContext()
调用以记录所请求的上下文(或者只制作一个您调用的普通包装函数而不是本机调用):

//存储旧调用
HTMLCanvasElement.prototype.\u getContext=HTMLCanvasElement.prototype.getContext;
//存储类型(如果需要)
HtmlCanvaElement.prototype.\u contextType=null;
//允许注册类型的旧调用的包装器
HTMLCanvasElement.prototype.getContext=函数(类型){
此._contextType=type;
返回此。\u getContext(类型);
};
//检查是否有上下文
HTMLCanvasElement.prototype.hasContext=函数(){
返回此。\u contextType;
};
//----------------------------------------------------------
//测试:
var canvas=document.getElementById('canvas'),
ctx;
out.innerHTML++=canvas.hasContext()++'
'; //->空的 ctx=canvas.getContext('2d'); out.innerHTML+=canvas.hasContext(); //->2d

用例: