我收到以下错误
错误:未捕获的TypeError:无法读取null的属性“innerHTML” 在script.js:1
我已经尝试了我能想到的一切,但没有任何作用。
var canvas = document.getElementById("can").innerHTML;
var ctx = canvas.getContext("2d");
ctx.fillStyle = ("green");
ctx.fillRect(0, 0, 300, 200);
<!DOCTYPE html>
<html>
<head>
<title>Canvas</title>
</head>
<body>
<script src="script.js"></script>
<!-- Canvas -->
<canvas id="can" width="300" height="200" style="border:4px solid red;">
</canvas
</body>
</html>
答案 0 :(得分:1)
好的,有两个严重的错误。
canvas
注释。见addEventListener
和DOMContentLoaded。.innerHTML
。 getContext附加在不在内容上的节点上。
document.addEventListener('DOMContentLoaded', function() {
var canvas = document.getElementById("can");
var ctx = canvas.getContext("2d");
ctx.fillStyle = "green";
ctx.fillRect(0, 0, 300, 200);
});
<!DOCTYPE html>
<html>
<head>
<title>Canvas</title>
</head>
<body>
<script src="script.js"></script>
<!-- Canvas -->
<canvas id="can" width="300" height="200" style="border:4px solid red;">
</canvas>
</body>
</html>
答案 1 :(得分:1)
有两件事 首先,您不需要.innerHTML作为其他答案 其次,您必须在窗口加载事件中运行脚本,如下所示:
window.addEventListener('load', function () {
var canvas = document.getElementById("can");
var ctx = canvas.getContext("2d");
ctx.fillStyle = ("green");
ctx.fillRect(0, 0, 300, 200);
});
或者你应该在canvas标签后加载javascript。
答案 2 :(得分:0)
使用
var canvas = document.getElementById("can");
不是
var canvas = document.getElementById("can").innerHTML();
请参阅W3C - Canvas
请参阅W3C - DOM Event Listener example
function doSomething() {
var canvas = document.getElementById("can");
var ctx = canvas.getContext('2d');
/*
another scripts...
*/
}
window.addEventListener('onload', doSomething, false);