如何在 XMLHttpRequest 中捕获 Chrome 错误 net::ERR_FILE_NOT_FOUND?

2024-02-04

我想创建 chrome 扩展,它将能够读取本地文件并使用其中编写的代码。我的简单代码是:

const readFile = (filePath) => {
  return new Promise(function (resolve, reject) {
    const xhr = new XMLHttpRequest()
    xhr.onerror = (error) => {
      reject(error)
    }
    xhr.onreadystatechange = function () {
      if (xhr.readyState === 4) {
        resolve(xhr.response)
      }
    }
    xhr.ontimeout = function () {
      reject('timeout')
    }
    xhr.open('GET', filePath)
    xhr.send()
  })
}

async function () {
    const code = await readFile(jsFilePath)
    console.log(code)
}

当我的文件路径正确时,此代码成功运行。但是当它不是 Chrome 控制台时会抛出此错误:

GET file:///home/maxim/Documents/test.jsa net::ERR_FILE_NOT_FOUND

通常的 try/catch 块不起作用

async function () {
  try {
    const code = await readFile(jsFilePath)
    console.log(code)
  } catch (e) {
    console.log(e)
  }
}

我怎样才能捕捉到这种类型的错误?


首先net::ERR_FILE_NOT_FOUND是浏览器错误(请参阅Chromium/Chrome 错误列表 https://cs.chromium.org/chromium/src/net/base/net_error_list.h, Chrome 失败错误代码 https://stackoverflow.com/questions/42524254/chrome-fail-error-codes,所以你无法用JS代码捕获它。

具体来说net::ERR_FILE_NOT_FOUND“并不表示致命错误。通常此错误将作为通知生成”。

所以最好的方法是附加onloadend处理程序到XMLHttpRequest,在 Ajax 请求完成时触发(无论成功还是失败)。

But 你无法检查状态,实际上的值status, statusText and readyState的属性XMLHttpRequest在文件存在的情况下和在未找到文件的情况下总是:

status: 0
statusText: ""
readyState: 4

相反你可以检查属性response, responseText and responseURL当找不到文件或其他情况时,其值为“”:

response: <file content>
responseText: <file content>
responseURL: "file:///..."

其他要检查的值是event(进度事件)loaded如果找不到文件(或在其他情况下加载的字节),该属性的值为 0。

所以代码可以是:

const readFile = (filePath) => {
    return new Promise(function (resolve, reject) {
        const xhr = new XMLHttpRequest()
        xhr.onloadend = (event) => {
            console.log("xhr.onloadend", event, xhr.status, xhr.statusText, xhr.readyState, xhr);
            if (event.loaded && xhr.response) {
                resolve(xhr.response);
            } else {
                reject("error");
            }
        }
        xhr.open('GET', filePath);
        xhr.send();
    });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 XMLHttpRequest 中捕获 Chrome 错误 net::ERR_FILE_NOT_FOUND? 的相关文章

随机推荐

  • 如何抑制“SpriteKit 纹理图集生成器警告”?

    Xcode 报告以下警告 SpriteKit 纹理图集生成器警告由于输入纹理尺寸而将 images atlas 拆分为 2 个纹理图集 虽然我将来会修改我的图像以避免 SpriteKit 生成此警告 但我想使用一些 pragma 指令暂时抑
  • 点击事件中的全日历错误时间

    我正在使用角度和全日历 我有 令人惊讶的 时区问题 而且我似乎无法解决问题 如果在周视图中我点击 08 00 我打开一个模式并显示时间 我会看到 09 00 timezone Europe Brussels ignoreTimezone f
  • 枕头调整像素图像大小 - Django/Pillow

    我正在 Django 中开发一个图像上传器 图像上传并保存到磁盘后 我正在尝试调整保存的图像的大小 同时保持其纵横比 我正在使用 Pillow 进行图像处理 调整大小 当我尝试调整图像大小时出现问题 即使调整大小的图像的长宽比与原始图像的长
  • 使用 PHP 和 jQuery 生成并下载 .csv 文件

    我想生成一个 csv 文件 然后使用 AJAX 下载它 在现场 csv php 我有这个代码
  • 错误错误:未捕获(承诺):QuotaExceededError Ionic 3

    我正在使用 ionic 3 创建一个应用程序 我正在 ionic 存储中保存一个字符串 我工作得很好 但突然出现这个错误 Home ts 这是我设置字符串的地方 this storage set 123 JSON stringify dat
  • 如何跳过 x 轴上的标签?

    我已经尝试了很长一段时间来弄清楚如何跳过该图表 x 轴上的标签 例如 显示每第三个或第四个标签 我尝试将 autoSkip 和 stepSize 添加到刻度配置中 但没有任何变化 有没有一种简单的方法可以做到这一点 Edit visitor
  • 如何使用 JavaScript 检测我的浏览器版本和操作系统?

    我尝试使用下面的代码 但它只在 Chrome 和 Mozilla 中显示结果 在 IE6 中不起作用 div div
  • matplotlib 轴标签出现奇怪错误

    我对 Python 和一般编程都很陌生 所以如果我遗漏了一些明显的东西 请提前道歉 我正在尝试绘制图表并标记轴 但每次尝试标记 y 轴时都会引发异常 我在新脚本中编写了下面的代码 以确保问题不是来自模块中的其他地方 我正在使用Python
  • 未知目录的重写规则

    所以我试图获取 mod rewrite 规则来将请求重定向到带有 htaccess 文件的 php 脚本 问题是 我希望它能够工作 无论我将项目放在网络服务器上的哪个位置 htaccess 文件和 php 脚本始终位于同一文件夹中 重写本身
  • 读取 XMLStreamReader 时出错。获取故障响应

    我开发了一个应用程序 用户应该填写申请表并在最后付款 要付款 用户应在下面给出的链接中填写详细信息 Payment https k2 karnataka gov in wps portal Khajane II Scope Remittan
  • 在 Ubuntu 上安装 Python3 的 mod_wsgi

    谁能给我一套在 Ubuntu for Python 3 上安装 mod wsgi 的清晰说明 我确实使用 Python3 成功获得了 Flask 和 mod wsgi 并且短暂地感到高兴 直到我查看 Apache 的日志并意识到我遇到了这个
  • UnicodeDecodeError:无效的起始字节

    我有一个关于 UnicodeDecodeError invalid start byte 的快速问题 我认为我的文本中的某个地方有非 UTF 8 字符 但错误消息的位置是读取文件的起点 所以我不知道如何修复它 如果您有任何建议 请告诉我 以
  • Mysql 如何获取给定年份和月份的第一个星期一

    如何获取给定年份月份的第一个星期一 SET YearMonth 201304 Result 2013 04 01 For April 2013 11 04 For November 提前致谢 Try this SET firstday 20
  • 使用 CSVHelper 动态映射嵌套对象

    我正在使用 CSVHelper 感谢 Josh Close 来读取 CSV 文件 效果非常好 我现在尝试使用它将该文件映射到一些内部类 但是 我映射的 CSV 因客户而异 但都需要映射到我的内部类 我需要允许客户定义 CSV 如何映射到我的
  • 安装失败,并显示消息“INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME”

    因此 我在项目中对包名称进行了一些重构 现在我无法再安装我的应用程序 大约在同一时间 我更新到了 android studio 的最新版本 我相信这可能是问题所在 因为我认为我在升级之前进行了重构 我只是不记得 100 这是我的清单
  • 金字塔图案中圆的绘制方法

    我想在 HTML 画布上以金字塔图案绘制圆形球 像这样 小提琴 你可以向我展示算法 https jsfiddle net ofxmr17c 3 https jsfiddle net ofxmr17c 3 var canvas documen
  • Android OpenGL ES 应用程序的屏幕截图

    我有一个在已添加的 GLSurfaceView 上运行的基本 openGL ES 20 应用程序 GLSurfaceView view new GLSurfaceView this view setRenderer new OpenGLRe
  • 带有 multipart/form-data 的请求返回 415 错误

    我需要使用以下方式接收此请求Spring POST test HTTP 1 1 user agent Dart 2 8 dart io content type multipart form data boundary dio bounda
  • .htaccess http 到 https 重定向 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我目前正在使用以下 htaccess 将我的网站重定向到 https 和 www 如果尚未使用 RewriteEngine On RewriteCon
  • 如何在 XMLHttpRequest 中捕获 Chrome 错误 net::ERR_FILE_NOT_FOUND?

    我想创建 chrome 扩展 它将能够读取本地文件并使用其中编写的代码 我的简单代码是 const readFile filePath gt return new Promise function resolve reject const