この問題は一般的なようですが、答えは見つかりませんでした。
キャンバスタグのみを含むこの単純なhtmlを取得しました
<!doctype html>
<head>
<meta charset = "utf-8">
<script src="js/script.js"></script>
<title>Title</title>
</head>
<body>
<canvas id = "canvas"></canvas>
</body>
</html>
script.js では、window.onload イベントをキャッチしようとしています。
window.onload = init;
function init(){
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
context.fillRect(50, 20, 150, 150);
}
しかし、何も起こりません。js の最初の行が実行される前でも、html がロードされていると仮定します。
そのため、onload イベントの代わりに、スクリプト定義を本文の最後に配置することがわかったので、スクリプトが実行されると、ウィンドウは既に読み込まれているはずです。だから私はこれが好きでした:
<!doctype html>
<head>
<meta charset = "utf-8">
<!-- gone -->
<title>Title</title>
</head>
<body>
<canvas id = "canvas"></canvas>
<script src="js/script.js"></script> <!-- inserted -->
</body>
</html>
と
<!-- window.onload = init; -->
init() <!-- inserted -->
function init(){
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
context.fillRect(50, 20, 150, 150);
}
そして、ある意味で動作します(長方形を描画します)が、 Uncaught ReferenceError: context is not definedというエラーが表示されます。
だから私の質問は、私が間違っていることですか?これを行うためのより良い方法があるかどうかも疑問に思っています。
PS私はjqueryを使用しない傾向があります...
EDITED:コンテキストのエラーは上記のコードとは何の関係もありませんが、本体の最後にjsファイルへのリンクを配置するという考えはまだ好きではありません...