Не удается загрузить библиотеку Raphael.js, метод appendChild не найден? - PullRequest
11 голосов
/ 04 ноября 2010

Я пытаюсь загрузить raphael.js (скачанный и запущенный локально) в файл HTML, но скрипт отказывается закрываться, что приводит к ошибке в моей консоли JS:

Uncaught TypeError: 
Cannot call method 'appendChild' of null
bV                   on raphael.js:7
a                    on raphael.js:7
(anonymous function) on raphael.html:22

Это для минифицированной версии, такая же ошибка возникает в неминной версии в строке 1789.

Я скачал код с веб-сайта, попробовал как сжатый, так и несжатый файл, а также загрузил файл JS, связанный в одной из демонстраций, и все они отлично работают в моем браузере (chrome).

Есть мысли?

1 Ответ

28 голосов
/ 22 декабря 2010

У меня была такая же проблема, и это оказалось проблемой порядка загрузки. Вот оригинальный код:

<!doctype html>
<html>
  <head>
    <script src='raphael-1.5.2.js'></script>
    <script>
        var paper = Raphael(10, 50, 300, 250);
        var circle = paper.circle(50, 40, 10);
        circle.attr('fill', '#c00');
        circle.attr('stroke', '#fff');
    </script>
  </head>

  <body></body>
</html>

Оказывается, что когда вызывается Raphael(10, 50, 300, 250), он пытается добавить элемент canvas к телу ... которого еще не существует. Таким образом, упаковка в функцию загрузки window.onload или jQuery решила проблему:

<!doctype html>
<html>
  <head>
    <script src='raphael-1.5.2.js'></script>
    <script src='https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js'></script>
    <script>
      $(function () {
        var paper = Raphael(10, 50, 300, 250);
        var circle = paper.circle(50, 40, 10);
        circle.attr('fill', '#c00');
        circle.attr('stroke', '#fff');
      });
    </script>
  </head>

  <body></body>
</html>
...