美文网首页
JavaScript-出现错误Uncaught TypeErro

JavaScript-出现错误Uncaught TypeErro

作者: 升不上三段的大鱼 | 来源:发表于2021-08-31 16:42 被阅读0次

原代码

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>WebGL Demo</title>
    <link rel="stylesheet" href="../webgl.css" type="text/css">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/gl-matrix/2.8.1/gl-matrix-min.js"
      integrity="sha512-zhHQR0/H5SEBL3Wn6yYSaTTZej12z0hVZKOv3TwCUXT1z5qeqGcXJLLrbERYRScEDDpYIJhPC1fk31gqR783iQ=="
      crossorigin="anonymous" defer>
    </script>
    <script type="text/javascript" src="./script/gl-matrix.js" ></script>
    <script type="text/javascript" src="./script/webgl_demo.js" ></script>
  </head>

  <body>
    <canvas id="glcanvas" width="640" height="480"></canvas>
  </body>
</html>

出现了错误 Uncaught TypeError: canvas is null,对应位置的 js 代码为

 const canvas = document.querySelector("#glcanvas"); 
 const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');

这里看上去是没有问题的,问题不在这里。

出现这个错误的原因是 script 在加载 canvas 之前执行了,把位置改一下就行了。

 <body>
    <canvas id="glcanvas" width="640" height="480"></canvas>
    <script type="text/javascript" src="./script/webgl_demo.js" ></script>
  </body>

进一步的解释,script 文件在事件发生前是不会访问任何内容的,但是把 script 文件放在 head,需要保证它在运行的时候没有节点依赖项。而这里有一个 #glcanvas。 最简单的方法就是把这一行放在body的底部。

如果你非要把所有 script 都写在 head 里的话,另一种方法是加上 defer,来推迟脚本的加载。

<head>
<script type="text/javascript" src="./script/webgl_demo.js" defer></script>
</head>

相关文章

网友评论

      本文标题:JavaScript-出现错误Uncaught TypeErro

      本文链接:https://www.haomeiwen.com/subject/bomziltx.html