在自定义元素问题中扩展 HTMLCanvasElement

Extending HTMLCanvasElement in Custom Element issue

我无法获取自定义 canvas 元素的绘图上下文。

var customCanvas      = Object.create(HTMLCanvasElement.prototype),
    canvasConstructor = document.registerElement("custom-canvas", { prototype: customCanvas }),
    canvas            = document.createElement("custom-canvas"),
    ctx               = canvas.getContext("2d"); // Uncaught TypeError: Illegal invocation

是错误、遗漏还是其他原因?

P.S。我正在寻找仅基于铬的浏览器的解决方案。

您在这里遗漏了一些要点,在扩展本机对象时,您必须使用 extends 选项:

canvasConstructor = document.registerElement("custom-canvas", { prototype: customCanvas, extends: 'canvas' });

而且你不能直接创建 custom type extensions,所以你不能做 createElement("custom-canvas") 你必须使用 is 属性,而要做到这一点你必须使用 createElement 有两个参数:

canvas = document.createElement('canvas', 'custom-canvas');
//canvas in HTML will be <canvas is="custom-canvas"></canvas>
//<custom-canvas></custom-canvas> is invalid

通过所有这些操作,您将能够使用您的类型扩展:

ctx = canvas.getContext('2d'); //no error :)