代码如下:
<script src="./aaa.js" type="module"></script>
<script src="./bbb.js" type="module"></script>
<script src="./ccc.js" type="module"></script>
引入了三个js文件,内部使用了 ES6 的模块化语法,结果在chrome里报错了:
这里是使用了 file 协议,所以本地服务器打开文件(http协议)就不会报错了。但是我不太清楚为什么会出现跨域问题?
咱们知道,script标签是自带跨域的功能的,这也就是为什么在某些场合会通过jsonp并结合script来请求资源。
其次,跨域导致的原因是协议、域名、端口号不同就会导致,而这里的协议通常是指http协议,https等协议。也就是说http, data, chrome, chrome-extension, https这些协议是支持跨域请求的,而file协议并不支持。
file协议:本地文件传输协议,主要的目的就是用于访问本地计算机中的文件,好比通过Windows的资源管理器中打开文件或者通过右键单击‘打开’一样。然后通过
file:///文件路径
这样的形式去访问。那么file协议和http协议有啥区别,浏览器通过file://访问文件和http://访问文件的区别:而当你在某盘符位置下直接打开一个网页(script标签中引入了某地的某个js文件),则在浏览器地址栏呈现如下:file:///D:/MyStudyProject/JSTopLevel/chapter-9/2%E5%AF%BB%E6%89%BE%E5%AD%97%E7%AC%A6%E4%B8%B2%E9%87%8C%E5%B8%A6%E5%BC%95%E5%8F%B7%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2.html,则会出现跨域问题。而http、https等协议支持跨域请求。所以解决办法就是通过搭建本地一个服务器去进行资源的问题来解决跨域问题。