Проблема в том, что, хотя вы добавили прослушиватель событий, чтобы проверить, закончилась ли загрузка страницы, он просто вызовет функцию eventWindowLoaded .
Это означает, что все остальные команды сразу после этогоЛиния
window.addEventListener("load", eventWindowLoaded, false);
будет вызываться независимо от того, загружена она или нет.
Поэтому, как только она достигнет
context = canvas.getContext('2d')
, произойдет сбой с полученной ошибкой,Элемент html canvas пока недоступен, поэтому значение canvas будет неопределенным.
Чтобы исправить эту оболочку, все внутри функции eventWindowLoaded выглядит следующим образом:
window.addEventListener("load", eventWindowLoaded, false);
function eventWindowLoaded() {
var canvas = document.getElementById('myCanvas');
context = canvas.getContext('2d');
centerX = canvas.width / 2;
centerY = canvas.height - 30;
angle = Math.PI * 0.8;
radius = 150;
context.font = '30pt helvetica';
context.textAlign = 'center';
context.fillStyle = 'red';
context.strokeStyle = 'blue';
context.lineWidth = 4;
drawTextAlongArc(context, 'Arc Canvas Text', centerX, centerY, radius, angle);
// draw circle underneath text
context.arc(centerX, centerY, radius - 10, 0, 2 * Math.PI, false);
context.stroke();
drawTextAlongArc();
}