返回顶部

Html——ie打开项目,外引js,引入成功却报错:无法获取未定义或 null 引用的属性“getItem”

参考:https://www.cnblogs.com/qq254980080/p/11785677.html

      https://blog.csdn.net/u014091101/article/details/88057449

      https://blog.csdn.net/qq_39207948/article/details/80615108

   https://blog.csdn.net/liunianqingshi/article/details/41941797?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

 

 

我的情况:页面中外引index.js,本地用ie8浏览器打开,控制台报错:

 

 

 index.js:

···
var token = sessionStorage.getItem('token');
···
var indexLoad = {
    index: function () {
        ···
    }
}
···

 

html:

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=8">
    <script src="js/index.js"></script>
</head>
<body>
    ···
</body>
<script>
    $(document).ready(function () {
        indexLoad.index();
    });
</script>
</html>

 

刚开始以为是index.js没有引入成功,就在index.js的第一行打印,控制台是有输出的。排除引入失败的原因,挨个打印,发现获取token报错后,js就没有继续往下执行了,所以才会报第二个错。

 

总结:

  报错1原因 —— IE8-IE10中是需要服务器或者localhost,才能使用localStorage和sessionStorage

  报错2原因 —— js是‘单线程’语言,执行模式有两种:同步,异步

        单线程:只有一条流水线

        同步:依次在流水线上执行

        异步:流水线旁加了一个临时储物台(任务队列),会把某些模块拿到临时储物台,或者会把临时储物台的某些模块插队到流水线

         js默认模式是同步模式,按流水线执行:A,B,C,不管A里边代码运行时间多长,都要先执行完A,再执行B,再执行C

posted @ 2020-06-17 15:46  前端-xyq  阅读(2643)  评论(0编辑  收藏  举报