Javascript 为什么变量声明在Windows 8应用程序中显示错误?

Javascript 为什么变量声明在Windows 8应用程序中显示错误?,javascript,.net,html,windows-8,winjs,Javascript,.net,Html,Windows 8,Winjs,我正在使用Windows8WinJS应用程序。这是我在javascript中声明变量的代码。为什么第二行显示错误“0x800a138f-JavaScript运行时错误:无法获取未定义或空引用的属性“getContext”。声明canvas.getContext的方式是否错误?同样的代码在桌面chrome中运行良好,但在模拟器中不起作用 var canvas = document.getElementById('canvas'), context = canvas.getConte

我正在使用Windows8WinJS应用程序。这是我在javascript中声明变量的代码。为什么第二行显示错误“0x800a138f-JavaScript运行时错误:无法获取未定义或空引用的属性“getContext”。声明canvas.getContext的方式是否错误?同样的代码在桌面chrome中运行良好,但在模拟器中不起作用

var canvas = document.getElementById('canvas'),
        context = canvas.getContext('2d'),
        controls = document.getElementById('controls'),
        animateButton = document.getElementById('animateButton');

没有加载id为canvas的元素。赋值后,您的
var画布
null
。确保在
DOM
就绪时,您正在
app.ready
回调中执行所有这些操作

app.onready = function (args) {
    var canvas = document.getElementById('canvas'),
        context = canvas.getContext('2d'),
        controls = document.getElementById('controls'),
        animateButton = document.getElementById('animateButton');
}

加载页面后访问dom元素。这可以在page.ready事件处理程序中完成

page.js:
WinJS.UI.Pages.define('/pages/mypage/page.html', 
    {
        ready: function onready(element, options)
        {
            // all dom elements with id will have the respective variables available here.
            // need not create variable for canvas.
            var context = canvas.getContext('2d');
        }
    });
page.html:

<html>
<head>
    <title></title>
    <link href="/pages/mypage/mypage.css" rel="stylesheet" />
    <script src="/pages/mypage/mypage.js" type="text/javascript"></script>
</head>
<body>
    <div class="mypage fragment">
        <header role="banner">
            <button class="win-backbutton" aria-label="Back" disabled type="button"></button>
            <h1 class="titlearea win-type-ellipsis">
                <span class="pagetitle">My Page</span>
            </h1>
        </header>
        <section aria-label="Main content" role="main">
            <canvas id="canvas">
            </canvas>
        </section>
    </div>
</body>

我的页面

代码运行时是否存在id为“canvas”的元素?如果不是,则
canvas
变量将为
null
,因此html文档中存在error.id=“canvas”。如果我删除这一行,它将以空白画布执行。请记住,您可以在给您带来麻烦的行中添加断点(F9),在调试模式下运行(F5),然后在快速观察窗口(Shift+F9)中检查该行。如果您这样做,并在快速观察评估框中输入
document.getElementById('canvas')
,然后点击enter,您将看到
null
,这意味着它找不到画布。