Ошибка выполнения Javascript: приложение не определено

Я пытаюсь создать несколько простое приложение, используя Canvas и Javascript для приложения Windows 8, которое я делаю. После компиляции кода в Visual Studio 2012 для приложений Windows 8 я получаю следующее сообщение

0x800a1391 — ошибка выполнения JavaScript: «приложение» не определено

Что я сделал не так и какой код использовать для решения проблемы?

HTML

    <!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Untitled</title>

    <!-- WinJS references -->
    <link href="//Microsoft.WinJS.1.0/css/ui-dark.css" rel="stylesheet" />
    <script src="//Microsoft.WinJS.1.0/js/base.js"></script>
    <script src="//Microsoft.WinJS.1.0/js/ui.js"></script>

    <!-- references -->
    <link href="/css/default.css" rel="stylesheet" />
    <script src="/js/default.js"></script>
    <!-- CreateJS -->
    <script src="js/createJS/easeljs-0.5.0.min.js" type="text/javascript"></script>
    <script src="js/createJS/preloadjs-0.2.0.min.js" type="text/javascript"></script>
</head>
<body>
    <canvas id="gameCanvas"></canvas>
</body>
</html>

JS

var canvas, content, stage;
var bgimage, b1Image, p2Image, ammoImage, p1Lives, p2Lives, title, endGameImage;
var bgbitmap, p1bitmap, p2bitmap, ammoBitmap;
var preload;

// Scale Factor
var SCALE_X = window.innerWidth / 800;
var SCALE_Y = window.innerHeight / 480;
var MARGIN = 25;
var GROUND_Y = 390 * SCALE_Y;


function initialize() {
    canvas = document.getElementById("gameCanvas");
    canvas.width = window.innWidth
    canvas.height = window.innerHeight;
    context = canvas.getContext("2d");

    function prepareGame() {
        bgimage = preload.getResult("screenImage").result;
        bgbitmap = new Bitmap(bgimage);
        bgbitmap.scaleX = SCALE_X
        bgbitmap.scaleY = SCALE_Y
        stage.addChild(bgBitmap);

        stage.update();
    }

    //PreloadJS
    preload = new PreloadJS();
    preload.onComplete = prepareGame;
    var manifest = [
    { id: "screenImage", src: "images/Backgrounds/gameplay_screen.png" },
    { id: "redImage", src: "images/Catapults/Red/redIdle/redIdle.png" },
{ id: "blueImage", src: "images/Catapluts/Blue/blueIdle/blueIdle.png" },
{ id: "ammoImage", src: "images/Ammo/rock_ammo.png" },
{ id: "winImage", src: "images/Backgrounds/victory.png" },
{ id: "loseImage", src: "images/Backgrounds/defeat.png"  },
{ id: "blueFire", src: "images/Catapults/Blue/blueFire/blueCatapult_fire.png" },
{ id: "redFire", src: "images/catapults/Red/redFire/redCatapult_fire.png" }
];
preload.loadManifest(manifest);

stage = new Stage(canvas);
}

function gameLoop() {
    update();
    draw();
}

function update() {

}

function draw() {

}

app.oncheckpoint = function  (args) { 
    document.addEventListener("DOMContentLoaded", initialize, false);
    app.start();
};

Кроме того, я использую CreateJS, если это что-то значит.


person Shaquille Ray    schedule 30.10.2012    source источник


Ответы (1)


app не является глобальным, поэтому он действительно будет неопределенным в контексте, показанном выше. Он определен в модуле (анонимная функция) в default.js:

(function () {
    "use strict";

    WinJS.Binding.optimizeBindingReferences = true;

    var app = WinJS.Application;

Тем не менее, что вы пытаетесь сделать в этом фрагменте кода? oncheckpoint будет включать код для сохранения состояния после приостановки ваше приложение; добавление прослушивателя событий и вызов start на самом деле не имеет смысла в этом контексте.

person Jim O'Neil    schedule 30.10.2012