2

以下のコードを IE7/WinXP32 で実行すると、コンソールの出力が「未定義」になります。次の 2 つの変更のいずれかを行うと、出力は予期される "getContext()" に変更されます。

  • 画像タグは外してます。
  • 私が使用する: <body onload="draw()">

ここで何が起こっているのか分かりますか?回避策は何ですか?

<!DOCTYPE HTML PUBLIC 
  "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>
  <title>Canvas</title>        
  <script type="text/javascript">
    var djConfig = {parseOnLoad: false, isDebug: true};
  </script>
  <script type="text/javascript" 
    src="/development/javascript/dojo-release-1.4.3-src/dojo/dojo.js">
  </script>
  <!--[if IE]>
    <script type="text/javascript" src="/javascript/excanvas_r73.js"></script>
  <![endif]-->
  <script type="text/javascript">
    function draw() {
        var canvas = dojo.byId("canvas");
        console.log(canvas.getContext);
    }

    dojo.addOnLoad(draw);
  </script>
</head>

<body>
  <canvas id="canvas" width="100" height="100"></canvas>
  <img src="nonexisting.gif">
</body>

</html>

更新:「dojo.addOnLoad(draw);」を置き換えるようです 次のコードでトリックを行います。

function init() {
    dojo.addOnLoad(draw);
}

if (dojo.isIE) {
    dojo.connect('onload', init);
} else {
    init();
}
4

1 に答える 1

2

dojo.addOnLoad は document.onload の前に起動します。DOMContentLoaded に関連付けられていると思います。おそらく、excanvas は同じイベントで初期化を行うのでしょうか? document.onload をそのまま使用できますか?

于 2010-07-18T06:07:30.753 に答える