webshim polyfill canvas не будет работать в режиме IE7 - PullRequest
3 голосов
/ 20 мая 2011

У меня возникли проблемы с запуском полифилла холста плагина webshims.

В IE9 в режиме IE7 появляется следующая ошибка:

  SCRIPT438: Object doesn't support property or method 'fillRect'
  problem.html, line 21 character 7

при попытке запустить этот код:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
    <title>DealingTree</title>
    <meta http-equiv="Content-type" content="text/html;charset=utf-8"/>
    <script type="text/javascript" src="/js/modernizr.js"> </script>
    <script type="text/javascript" src="/js/jquery.js"> </script>
    <script type="text/javascript" src="/js/sssl.js"> </script>
    <script type="text/javascript" src="/js/webshims/js-webshim/minified/polyfiller.js"> </script>
  </head>
  <body>
    <canvas id="savings" height="350" width="700"> </canvas>
    <script type="text/javascript">
      //<![CDATA[
      window.FlashCanvasOptions = { disableContextMenu: true };
      $.webshims.setOptions( 'canvas', { type: 'flashpro' } );
      $.webshims.polyfill('canvas');
      var canvas = $('#savings');
      var context = canvas.getContext('2d');
      context.fillStyle='#F00';
      context.fillRect(0,0,700,350);
      //]>
    </script>
  </body>
</html>

Проблема возникает, использую ли я default (excanvas) или flashpro.

UPDATE: мне кажется, что getContext () возвращает объект jQuery вместо контекста.

Помогите, пожалуйста?

1 Ответ

1 голос
/ 26 мая 2011

Я получил следующее объяснение от автора плагина Александра Фаркаса по электронной почте:

Проблема заключается в следующем.Webshims выполняет асинхронное заполнение, используя загрузчик скриптовЧто хорошо для производительности в современных браузерах.Это также означает, что вам придется ждать, пока не будет готова функция canvas.

Ваш код должен быть обернут в событие domready, и все в порядке:

window.FlashCanvasOptions = { disableContextMenu: true };
$.webshims.setOptions( 'canvas', { type: 'flashpro' } );
$.webshims.polyfill('canvas');
$(function(){
     var canvas = $('#savings');
     var context = canvas.getContext('2d');
     context.fillStyle='#F00';
     context.fillRect(0,0,700,350);
});

Более подробную информацию о вашей проблеме вы найдете в документации @ http://afarkas.github.com/webshim/demos/index.html#polyfill-ready

...