1

我知道我正在做一些非常愚蠢的事情,所以希望第二双眼睛能指出我的愚蠢。我正在尝试让 Webshims polyfill 进行简单的画布测试(我第一次涉足它)。在 Chrome 和 IE9 中运行良好,但在 IE8 和 IE7(开发人员工具)中测试我得到错误:

对象不支持属性或方法“getContext”

这是我的代码

<!DOCTYPE html>
<html>
    <head>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>
        <script src="js-webshim/minified/extras/modernizr-custom.js"></script>
        <script>
            // set options for html5shiv
            if(!window.html5){
                window.html5 = {}; 
            }
            window.html5.shivMethods = false;
        </script>
        <script src="js-webshim/minified/polyfiller.js"></script>
        <script class="example">
            window.FlashCanvasOptions = {
                disableContextMenu: true
            };
            $.webshims.setOptions({

                waitReady: false
            });

            $.webshims.polyfill();
        </script>
    </head>
    <body>
        <canvas id="my-canvas" width="200" height="100" style="border:1px solid #c3c3c3;">
            Your browser does not support the HTML5 canvas tag.
        </canvas>
        <script>
            var ctx = $('#my-canvas').getContext('2d');
            ctx.fillStyle = "rgb(200,0,0)";  
            ctx.fillRect (10, 10, 55, 50);  

            ctx.fillStyle = "rgba(0, 0, 200, 0.5)";  
            ctx.fillRect (30, 30, 55, 50);

            window.FlashCanvasOptions = {disableContextMenu: true};
            $.webshims.setOptions('canvas', {type: 'excanvas'});
        </script>
    </body>
</html>

如果我将画布代码包装在 jquery 就绪函数中,我不会收到错误消息,但我也不会渲染画布。

$(function(){
    var ctx = $('#my-canvas').getContext('2d');
    ctx.fillStyle = "rgb(200,0,0)";  
    ctx.fillRect (10, 10, 55, 50);  

    ctx.fillStyle = "rgba(0, 0, 200, 0.5)";  
    ctx.fillRect (30, 30, 55, 50);
});

我已经在 BrowserStack 中对其进行了测试,结果相同。我究竟做错了什么?我很高兴我的昏暗暴露给所有人看..!

4

2 回答 2

1

已经很长时间了,但也许这会对某人有所帮助。

我遇到了同样的错误 - 没有记录错误,但画布上也没有出现任何内容。

这是通过添加修复的

<meta http-equiv="X-UA-Compatible" content="IE=7">
于 2014-03-19T06:05:14.160 回答
0

您必须删除 waitReady 或将其设置为 true。

于 2013-04-22T13:05:48.953 回答