gpt4 book ai didi

javascript - 使用 Chrome API 时未检查runtime.lastError

转载 作者:行者123 更新时间:2023-12-03 01:07:08 25 4
gpt4 key购买 nike

我在应用程序中使用 chrome.fileSystem API 来打开文件。当我单击文件选择器对话框的取消按钮时,出现错误:

Unchecked runtime.lastError while running fileSystem.chooseEntry: User cancelled

如何修复这个错误?

最佳答案

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

这个错误是什么?

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 文档:

All failures are notified via chrome.runtime.lastError.

  • 如果一切正常,它将是未定义
  • 如果出现问题,它将非空,chrome.runtime.lastError.message 将解释问题所在。

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

为什么我说它不重要?

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

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

它为何存在?

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

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

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

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

请注意,仅当发生不良情况时才会引发此错误,而 API 调用正常完成时不会引发此错误。

我能捕获它吗?

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

如何处理它?<​​/strong>

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

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 发现您在出现错误时检查了该值(即在回调中对其进行了计算),就不会抛出该错误。

关于javascript - 使用 Chrome API 时未检查runtime.lastError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28431505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com