【问题标题】:Importing script with type=module from local folder causes a CORS issue从本地文件夹导入 type=module 的脚本会导致 CORS 问题
【发布时间】:2020-12-31 12:35:36
【问题描述】:

我有一个调用 javascript 文件的小 html 文件,但是当我尝试在浏览器中访问它时,出现以下错误:

在以下位置访问脚本 'file:///C:/Users/jekob/Desktop/battleship/index.js' 来自原产地 “null”已被 CORS 策略阻止:跨源请求仅 支持协议方案:http、data、chrome-extension、edge、 https,chrome 不受信任。

我已经用谷歌搜索了几个小时,发现我可以通过服务器(如 node.js)托管我的应用程序,然后允许 CORS。但是我不想要任何服务器。我只想要一个简单的 html 和一个 js 文件。

index.html:

<!DOCTYPE html>
<html>
<head>
    <title>battle-ship</title>
    <link rel="stylesheet" type="text/css" href="index.css">
    
</head>
<body>
<div id="board"></div>
<script type="module"  src="index.js"></script>
</body>
</html>

index.js:

import {board} from './board_0.1.js';

console.log(board);

board.js:

class cell{
    constructor(){
        this.locationByLetter = null;
        this.locationByNumb = [];
        this.occupied = false;
        this.clicked = false;
    }
}

class shipDitel{
    constructor(name,size){
        this.name = name;
        this.size = size;
        this.location =[];
    }
}

export const board = buildBoard();
const shipType = [["Destroyer",2/*size*/],["Submarine",3],["Cruiser",3,],
                  ["Battleship",4,],["AircraftCarrier",5]];

var shipsArr=setShip();
var selectedShip =  selectShip(shipsArr[4]);
var stateGame ={
    setting:true,
    gameIsStart:false
    }

function buildBoard(){
..
};

function setShip(){   //setting to a ship  his name and size .
...
};

function selectShip(ship){
    ...
}

function  onSelectedCell(cell){
    ...
};    

function checkTheZone(cell){  
...
};

【问题讨论】:

  • 可以使用命令行选项启动一个 Chrome 实例(仅用于此网页)--disable-web-security 并绕过 CORs 保护。但是,您永远不应该使用此设置进行常规互联网浏览,因为它会带来很大的安全漏洞和漏洞。
  • 模块需要服务器。对于小型测试和摆弄,我发现从相关目录启动 python HTTP 服务器很容易;喜欢python -m http.server

标签: javascript html cors es6-modules


【解决方案1】:

我已经用谷歌搜索了几个小时,发现我可以通过服务器(如 node.js)托管我的应用程序

是的

然后允许 CORS。

由于它将是同源,因此您不需要 CORS。

但是我不想要任何服务器。我只想要一个简单的 html 和一个 js 文件。

那你就不能使用浏览器端的 ES6 模块了。

您需要先编写代码以不使用模块,或者使用 Webpack 或 Rollup 之类的东西将代码转换为以后不使用模块。

【讨论】:

  • 为什么会做出这个决定? JS 模块有什么不同导致它们的安全性降低,或者仅仅是 Mozilla 想要更多时间来测试潜在的安全问题?
猜你喜欢
  • 2014-09-03
  • 1970-01-01
  • 2016-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多