HTMLCanvas'getContext'不是受支持的属性或方法

HTMLCanvas 'getContext' is not a supported property or method

本文关键字:属性 方法 支持 getContext HTMLCanvas      更新时间:2023-09-26

我刚刚启动了一个HTML5游戏应用程序,我不断收到一些用户的'对象不支持属性或方法'getContext'错误日志。

我的设置只允许使用Chrome(16<)、Firefox(9<IE(<9)用户在他们的脸上安装了chromeflame。

只有我的一些IE9用户抛出了这个异常。我在几台带有IE9的windows机器上玩过这个游戏,包括vista和windows7。

搜索我的源代码,对于函数调用getContext,我得到了相同的模式。我使用document.createElement创建了一个画布元素,然后调用下一行的getContext('2d')。

var buffer = /** @type {!HTMLCanvasElement} */ (document.createElement('canvas')),
    ctx = /** @type {!CanvasRenderingContext2D} */ (buffer.getContext('2d')),
    draw = function(ctx) {
       /**
        * Alot of drawing calls.
        */
    };
draw(ctx);

考虑到我的很多IE9用户都按照应该的方式运行游戏,我不认为这是我的代码的问题,而是IE9中的一些工具栏/插件或设置让我在这里感到困惑。

你们觉得怎么样?

在插入<meta http-equiv="X-UA-Compatible" content="chrome=1, IE=edge">之后,我们已经大大减少了错误数量,我们仍然有一些,但这可能是用户使用chromeframe安装检查无法捕捉到的奇怪浏览器登录。

chrome=1表示"使用铬框架"(如果存在)。

IE=edge表示"使用尽可能高的IE版本"。

所以我现在就这么做。

据我所知,IE9完全支持canvas标记。但用户应该确保他没有处于兼容模式。但为了避免这个问题,我建议你使用excanvas。如果你不知道如何下载excanvas并添加以下链接
<!--[if lt IE 9]><script src="../excanvas/excanvas.original.js"></script><![endif]-->

您是否考虑过用户不知道自己使用的IE版本并报告错误的可能性?

来自指令

动态创建的元素如果您已经动态地创建了画布元素,则不会将getContext方法添加到元素中。要使其工作,您需要对G_vmlCanvasManager对象调用initElement。

var el = document.createElement('canvas');
G_vmlCanvasManager.initElement(el);
var ctx = el.getContext('2d');