javascript - fetch api 无法加载,不支持 url 方案 'file'

标签 javascript asynchronous es6-promise fetch-api

我尝试使用 fetch在本地主机上,但它没有用。
这是我的代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>

        fetch("hi.txt").then(function(response){
            response.text().then(function(text){
                alert(text)
            })
        })
    </script>
</body>
</html>
hi.txt 文件与脚本文件位于同一文件夹中。
以下错误显示在控制台中:index.html:12 Fetch API cannot load file:///C:/~~~~/hi.txt. URL scheme "file" is not supported.(~~~) 是路径

最佳答案

由于您的 URL 是相对的(它只是 "hi.txt" ),它是针对运行代码的页面的 URL 解析的。在您的情况下,这似乎是 file:///something — 即,您直接从文件系统加载的文件,而不是通过从服务器请求加载的文件。 Chrome 不允许从 file 获取方案。 file方案的来源是 null . Chrome 团队对 Same Origin Policy 的解读是任何来源,甚至它本身,都不应该匹配null . (我认为这是一个合理的解释,但意见可能会有所不同。)
在进行 Web 开发时,您希望通过服务器进程进行工作,因为直接从文件系统加载的页面与从服务器加载的页面相比,有时在一些微妙的方面表现不同。
有几种方法可以做到这一点:

  • 使用 IDE 的功能(如果您使用其中之一)和/或它的扩展。例如,对于 VSCode,有一个“实时服务器”扩展,这使得从最小的服务器运行代码变得非常容易。
  • 使用在本地运行的实际 Web 服务器进程。有一些简单的,易于安装。
  • 使用为您设置简单项目的各种“快速启动”脚手架工具之一,通常通过 npm (和 Node.js),您可以使用一个命令在开发模式下在本地构建和运行项目。
  • 关于javascript - fetch api 无法加载,不支持 url 方案 'file',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69144759/

    相关文章:

    javascript - 导出链式 promise 的返回值

    javascript - 在使用JavaScript点击表头查看正文之前将表体设置为隐藏

    javascript - 即使有引用,GreaseMonkey setTimeout 也不起作用(FF4)

    javascript - 将数字(前面不带字符)替换为 _(下划线)

    c# - 如何知道任务是否同步完成?

    javascript - 扩展 ES6 Promise 以将回调转换为延迟模式

    javascript - 连接日期和时间值

    Javascript 异步循环与 ajax 调用

    jquery - 变量分配在函数中不起作用(Ajax、JS)

    javascript - 是否每个带有 await 的 ECMAScript 运行时都等待任何 Thenable?