Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   excanvas при работе в новом окне (https://javascript.ru/forum/css-html-internet-explorer/2936-excanvas-pri-rabote-v-novom-okne.html)

vyv99 01.03.2009 21:39

excanvas при работе в новом окне
 
Пример из интернета работает со всеми браузерами:
<html>
 <head>
<!--[if IE]><script type="text/javascript" src="excanvas.js"></script><![endif]-->

  <script type="text/javascript">
    function draw(id) {
      var canvas = document.getElementById(id);
      var ctx = 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);
      
    }
  </script>
 </head>
 <body>
   <canvas id="canvasId" width="150" height="150"></canvas>
   <br/><br/>
   <input style="width:auto;" type="button" value="Нарисовать" onclick="draw('canvasId');">

 </body>
</html>


Файл "excanvas.js" лежит в папке рядом с html-файлом.
Не могу добиться того же результата при создании канвы скриптом:

<html>
 <head>
  <!--[if IE]><script type="text/javascript" src="excanvas.js"></script><![endif]-->
  <script type="text/javascript">
    function draw()
     {
      document.write("<canvas id='canvasId' width='150' height='150'><\/canvas>");
      var canvas = document.getElementById('canvasId');
      var ctx = 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);
     }
  </script>
 </head>
 <body>
   <input style="width:auto;" type="button" value="Нарисовать" onclick="draw();">
 </body>
</html>


Собственно, в последнем примере еще какой-то баг (работает только в ГуглХроме, а ФФ и Опера требуют перед и после канвы какого-либо текста.)
Но почему ИЕ не проходит строку "var ctx = canvas.getContext("2d");" ?

ZoNT 02.03.2009 11:35

скрипт-то в хэде...

Kolyaj 02.03.2009 11:56

Разгадка в функции init, которая вызывается при загрузке скрипта
init: function (opt_doc) {
      var doc = opt_doc || document;
      if (/MSIE/.test(navigator.userAgent) && !window.opera) {
        var self = this;
        doc.attachEvent("onreadystatechange", function () {
          self.init_(doc);
        });
      }
    },


З.Ы. Ах да, вы же даже не пытаетесь инициализировать канвас после создания, тогда мой ответ вам еще рано :)

vyv99 02.03.2009 22:05

Kolyaj. можно будет обратиться с этим же вопросом после того, как подрасту немного?

ZoNT. Спасибо?

Kolyaj 02.03.2009 22:09

Цитата:

Сообщение от vyv99
можно будет обратиться с этим же вопросом после того, как подрасту немного?

А что вас может остановить?


Часовой пояс GMT +3, время: 17:37.