Chrome アプリとしてパッケージ化したいキャンバスを使用する単純な HTML5 Snake ゲームがあります。これが私の通常のHTMLファイルです:
<!DOCTYPE html>
<html>
<head>
<title>Snake</title>
<link rel="stylesheet" href="snake.css">
</head>
<body>
<canvas id="canvas" width="700" height="700"></canvas>
<script type="text/javascript" src="food.js"></script>
<script type="text/javascript" src="snake.js"></script>
<script type="text/javascript" src="point.js"></script>
<script type="text/javascript" src="game.js"></script>
<script type="text/javascript">
window.onload = function() {
var canvas = document.getElementById("canvas"),
game = new Game(canvas, new Snake(canvas), new Food(canvas));
game.init();
game.run();
}
</script>
</body>
</html>
ただし、HTML 内のスクリプトは許可されていません。そこで、それを削除して、ウィンドウを作成する main.js を配置しました。上記と同じコールバックを提供します。window.onload
これは、これが chrome アプリと同等であると理解しているためです。
chrome.app.runtime.onLaunched.addListener(function() {
"use strict";
chrome.app.window.create('snake.html', {
bounds: {
width: 800,
height: 800
}
}, function() {
var canvas = document.getElementById("canvas"),
game = new Game(canvas, new Snake(canvas), new Food(canvas));
game.init();
game.run();
});
});
これは、DOM がロードされたように見えた後に実行されますが、document.getElementById
常に null を返します。開発者ツールでドキュメントを見ると、アプリ ウィンドウにキャンバスが表示されていても、スクリプトだけが読み込まれているように見えます (キャンバスの周りに境界線があります)。誰が何が起こっているのか教えてもらえますか? window.onload
動作しない場合に DOM にアクセスする適切な場所はどこですか?