使用 Chrome API 时未检查runtime.lastError

2023-11-27

I use chrome.fileSystem我的应用程序中用于打开文件的 API。当我点击Cancel文件选择器对话框的按钮时,出现错误:

未选中runtime.lastError在跑步的时候fileSystem.chooseEntry: 用户取消

如何修复这个错误?


在这种情况下,这个错误并不重要,但我将解释它以及如何消除它。

这是什么错误?

Chrome API 大多是异步的:操作完成时会调用一个回调。

的情况下chrome.fileSystem.chooseEntry,所选条目(或多个条目)将传递给回调:

chrome.fileSystem.chooseEntry(
  {/* options */},
  function(entry) {
    // This is the callback for the API call; you can do something with entry
  }
);

然而,API 并不保证产生一个结果。例如,在您的情况下,用户可以通过单击“取消”来拒绝提供访问权限。然后就没有可使用的条目,您可能需要一些解释来解释为什么会发生这种情况。如何在不使用额外的“错误”参数污染所有回调的情况下引发错误?

通常,Chrome 通过设置全局变量来处理这个问题,chrome.runtime.lastError,在调用回调时。Chrome 异步 API 中统一使用此参数而不是错误参数。事实上,引用chrome.fileSystem docs:

所有失败都会通过 chrome.runtime.lastError 通知。

  • 如果一切顺利,那就会了undefined.
  • 如果有问题,它将非空,并且chrome.runtime.lastError.message会解释出了什么问题。

但是,某些回调没有检查此错误变量。这可能表明存在编程错误,Chrome 添加了检查chrome.runtime.lastError实际上是在回调中检查(评估)的。如果不是,它认为这是一个未处理的异常,并抛出此错误。

为什么我说不重要呢?

虽然这是一个错误,但它不会中断程序的执行(它在异步任务结束时抛出),并且不会真正显示给用户。

虽然我说这并不重要,但您应该检查程序的逻辑。它可能会也可能不会——这是一个(严厉的)警告。

它为何存在?

警告,you,开发人员,您的代码probably尝试使用不存在的结果,因为出了问题。

您可能已经在检查错误,例如

if (entry) {
  // Process entry
} else {
  // Something went wrong (but what?)
}

Chrome 不会采用复杂的启发式方法来查看您的代码是否需要这种可能性。如前所述,错误是通过以下方式报告的chrome.runtime.lastError,并且您应该检查它。

请注意,仅当出现问题时才会引发此错误does发生,而不是在 API 调用正常完成时发生。

我能抓住它吗?

并不真地;它不是由您的代码引发的,而是由 Chrome API 中处理异步任务的清理代码引发的;因此使用try ... catch在你的回调中不会有帮助。由于它是异步的,因此使用try围绕原始 API 调用也无济于事。

该怎么办?

您应该向回调添加逻辑,以 Chrome 期望的方式检查问题,并可能对其做出反应。

function(entry) {
  if(chrome.runtime.lastError) {
    // Something went wrong
    console.warn("Whoops.. " + chrome.runtime.lastError.message);
    // Maybe explain that to the user too?
  } else {
    // No errors, you can use entry
  }
}

只要 Chrome 看到您checked出现错误时的值(即在回调中对其进行评估),不会引发错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Chrome API 时未检查runtime.lastError 的相关文章

  • 使用 获取用于 javascript 的 RSA 密钥?

    我的 Web 项目需要一个 RSA 密钥对 虽然有一些库 但我认为依靠浏览器 为了安全性和速度 为我生成密钥是个好主意 是否可以使用注册机或其他浏览器 API 来执行此操作 我不知道如何从注册机获取密钥 它们似乎是在提交时生成的 但我不想将
  • 如何通过aws-sdk(javascript或node)获取s3存储桶大小

    我尝试使用 javascript nodejs aws sdk 查找 获取 s3 存储桶信息 但没有找到这样的 api 如何通过 aws sdk javascript 或 node api 获取 s3 存储桶大小 信息 每天一次向 Clou
  • JavaScript 中的“new”关键字是什么?

    The newJavaScript 中的关键字第一次遇到时可能会很混乱 因为人们倾向于认为 JavaScript 不是面向对象的编程语言 它是什么 它解决什么问题 什么时候合适 什么时候不合适 它做了 5 件事 它创建一个新对象 这个对象的
  • Webpack 缺少 CommonsChunk 和 extract-text-webpack-plugin 模块

    我正在跟进Maxime Fabre 的 Webpack 教程 https blog madewithlove be post webpack your bags 我正在尝试获得一个非常简单的 webpack 包 其中包含 1 个入口点和 2
  • 拖放区缩略图宽度图像大小

    如何更改上传图像的缩略图大小 我在我的javascript中尝试过thumbnailWidth 350 但是这不会增加缩略图大小 而缩略图只是看起来放大了 如何操作图像缩略图大小 HTML section section
  • 获取请求的客户端 IP 地址而不是 Cloudflare 的 IP 地址

    Cloudflare 会更改传入请求的 IP 地址 因为 Cloudflare 是我的网站和互联网之间的中间件 代理 我该怎么办获取请求的初始IP地址 而不是 Cloudflare 的 IP 地址 我听说过mod cloudflare但是这
  • React/Redux bundle.js 太大

    我有一个小型的 React 项目 Webpack生成的bundle js大小为6 3Mb 如何将大小减小到 github webpack config js module exports devtool inline source map
  • 在 JavaScript 中定位提示弹出窗口

    我有一个如下所示的 JavaScript 提示 我想将提示放在屏幕中心 如何使用 javascript 做到这一点 function showUpdate var x var name prompt Please enter your na
  • Rails 递归地包含 javascripts 资源文件夹

    我了解如何将一个 JavaScript 文件添加到 Rails 资产管道中 只需添加 require filename 到 application js 但是如何在一个文件夹下包含多个 javascript 文件 vendor assets
  • 在 php、ajax 或 javascript 中加载进度?

    任何人都知道如何在系统仍在服务器端获取数据的同时在客户端显示加载进度以及完成的百分比 例如 当我在客户端按下 确定 按钮时 它会调用服务器端从数据库收集数据 整个过程可能需要2到3分钟 如何在客户端显示加载进度 大约加载完成了多少 我怎样才
  • 获得一次性绑定以适用于 ng-if

    这个问题已经被之前问过 https stackoverflow com questions 23969926 angular lazy one time binding for expressions 但我无法让该解决方案发挥作用 所以我想
  • JavaScript:预期的赋值或函数调用,却看到了一个表达式

    我正在使用 JSHint 来确保我的 JavaScript 是 严格的 但我收到以下错误 预期是赋值或函数调用 但看到的是表达式 关于以下代码 var str A B C D var data var strArr str split fo
  • 带时间戳的 Firestore 查询

    如果它是文本字段 我可以使用 where 条件获取数据 但是当我尝试对时间戳字段和日期执行相同操作时 事情不起作用 这是我的代码 home ts firebase firestore collection cities where time
  • toLocaleDateString() 在 Chrome 中如何工作?

    我理解了javascript方法toLocaleDateString 使用的计算机设置 让我们来W3Schools 示例 http www w3schools com jsref tryit asp filename tryjsref to
  • 显示班级图片 10 秒

    我有下面给出的代码显示9 boxes 其值如下digital time 还有一个班级box002显示digits相当于随机选择的九个盒子的值 box002 can be dragged to digital time starting wi
  • JavaScript 中最长的通用前缀

    我正在尝试解决 Leet Code 挑战14 最长公共前缀 https leetcode com problems longest common prefix 编写一个函数来查找字符串数组中最长的公共前缀字符串 如果没有公共前缀 则返回空字
  • 跨浏览器:禁用输入字段的不同行为(文本可以/不能复制)

    我有一个被禁用的输入 html 字段 在某些浏览器 Chrome Edge Internet Explorer 和 Opera 中可以选择并复制文本 但至少在 Firefox 中这是不可能的 您可以通过在不同浏览器中执行以下代码来测试
  • 在 JSP 或 Javascript 中清除浏览器缓存中的图像

    我正在为一所大学开发JSP Web 应用程序 用户页面中显示人员图片 用户注销后如何从网络浏览器缓存中清除这张图片 使用 JSP 或 JavaScript 那是不可能的 最好的选择是完全禁用相关资源的缓存 创建一个filter https
  • 使用 JavaScript onclick 添加表格行

    我正在尝试使用 javascript 添加下面找到的完全相同的元素 我已经尝试了这里找到的所有解决方案 我什至尝试用php echo但没有运气 无需更改任何输入名称或类似内容 只需单击该按钮即可向表中添加另一行 仅此而已 这是该元素 tr
  • 使用 JQuery 预填充选择字段的下拉选项验证

    我有这个 JQuery 片段来防止选择已在另一个字段中选择的下拉选项 var coll select name service on change function coll each function var val this value

随机推荐

  • R 中的桑基图

    尝试在 R 的帮助下制作一个相当通用的桑基图networkD3包裹 仅供参考 这是软件包手册中的示例 library networkD3 library jsonlite library magrittr energy lt https c
  • 从 AngularJS Web 应用程序发送电子邮件

    在我的一个 AngularJS Web 应用程序中 我需要通过向相关人员发送电子邮件来确认密码 我怎样才能在 AngularJS 中实现这一点 我是一名 NET 人员 我正在使用 Visual Studio 2013 您还可以考虑使用第三方
  • WPF 子控件的鼠标悬停触发效果

    假设我有这段代码
  • 我的网站的移动版,什么设计宽度是最佳的? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我要创建移动版本的网站 设计时应该选择什么宽度 我知道每个设备都有自己的屏幕宽度 并且很难适应所有设备 我真的很困惑 对移动网站世界来说相当陌生 请帮忙 谢谢 您的方法将取决于您想要 或可
  • Node.js 有模板引擎吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我正在尝试使用 Node
  • 删除 iOS UIBarButtonItem 的标题文本

    我想做的是从 后退 按钮中删除文本UIBarButtonItem 在导航栏上只留下蓝色 V 形 请记住 我正在针对 iOS 7 进行开发 我尝试了多种方法 包括但不限于 这是我不喜欢的图像方法 图像看起来不合适 UIBarButtonIte
  • 在 jupyter 中使用带有 bash 魔法的 python 变量

    我想使用 jupyter 笔记本中运行 bash 命令 bash魔术命令并传递 python 变量 如中所述这个帖子我可以这样做 bash s foo bar cp 1 2 这很好用 然而 当我有一堆这些变量并且 bash 命令很长时 使用
  • MediaRecorder 启动失败:-38

    我搜索了一下这个问题是否没有重复 我看到有些没有答案 有些没有帮助 这是我的代码 private void startRecording mRecorder new MediaRecorder mRecorder setAudioSourc
  • 如何捕获 printf 的输出?

    我正在调用一个函数funcB from funcA funcB使用几个printf语句来输出数据 有没有办法让我通过捕获该数据funcA 我无法修改funcB funcB printf s My Name is printf s I lik
  • 自动重构工具可以找到类似的 Java/Javascript 重复源代码吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在寻找一个工具来查找重复或similarJava Javascript 代码 我无法说出 的确切定义 similar 但我希望该工具足够智能 并
  • Elasticsearch在php中匹配子字符串

    下面给出的是我使用elasticsearch生成索引的代码 索引已成功生成 基本上我用它来根据电影名称 演员名称和基因生成自动建议 现在我的要求是 我需要将子字符串与特定字段相匹配 如果我使用 这工作正常 params body query
  • webdriver 的官方定位器策略

    In the 官方 W3C Webdriver 文档 明确指出了位置策略是 State Keyword CSS selector css selector Link text selector link text Partial link
  • 如何对 Windows 窗体单选按钮进行分组?

    如何对 Windows 窗体应用程序中的单选按钮进行分组 很像 ASP NET 的单选按钮列表 所以我可以在从选项中选择的每种情况之间进行切换 将一个组的所有单选按钮放入容器对象中 例如Panel or a GroupBox 这将在 Win
  • 将字符串化的字典列表转换回字典列表

    我知道要将字典转换为字符串 从字符串转换 我使用json loads and json dumps 但是 当给定表示字典列表的字符串时 这些方法会失败 例如 sample entry type test topic obama interv
  • 将 UpdatePanel 替换为 JQuery

    我使用 UpdatePanel 异步调用页面中的按钮单击事件 该事件调用另一个类中的方法 该方法在输出上写出 XML 文件 有没有办法用 JQuery 而不是 UpdatePanel 来做到这一点 使用 jQuery 来处理点击事件 然后在
  • 实体框架可以在没有交集对象的情况下处理多对多关系吗?

    使用数据库优先模型 假设我们有经典表Student Course and StudentCourse 后者显然有FKsStudent and Course 如果将此模型导入 EF 您将为每个模型生成一个对象 这Student and Cou
  • 服务限制默认值?

    Hi 根据这个link默认值WCF 4 0这是 最大并发会话数 16 处理器数量 最大并发会话数 MaxConcurrentCalls MaxConcurrentSessions 100 处理器计数 最大并发会话数 100 处理器数量 我知
  • 从 gevent-subprocess 获取实时标准输出?

    我试图通过 POPEN 立即获取进程的标准输出 使用 gevent 1 0 readline 和 read 仍然会阻塞进程并等待进程完成 有什么线索吗 是的 我到处寻找一个简单的解决方案 没有线程它必须是可能的 对吗 import geve
  • Isabelle/HOL 验证器核心

    Question Isabelle HOL验证器的核心算法是什么 我正在寻找方案元循环评估器级别的东西 澄清 我只对Verifier 而不是自动定理证明的策略 Context 我想从头开始实现一个简单的证明验证器 纯粹出于教育原因 而不是用
  • 使用 Chrome API 时未检查runtime.lastError

    I use chrome fileSystem我的应用程序中用于打开文件的 API 当我点击Cancel文件选择器对话框的按钮时 出现错误 未选中runtime lastError在跑步的时候fileSystem chooseEntry 用