gpt4 book ai didi

javascript - downloads.onChanged 的​​事件处理程序中出现错误 : TypeError: Cannot read property 'current' of undefined

转载 作者:行者123 更新时间:2023-12-03 04:45:23 26 4
gpt4 key购买 nike

我是 Chrome 扩展程序的新手,目前正在开发一个简单的扩展程序,用于打开上次下载文件的文件夹。如果文件被删除,它将打开下载文件夹。每当我运行代码时,此错误都会登录到我的控制台。感谢任何有关如何改进我的代码的帮助。

list .json

{
"name" : "Last Download",
"version" : "1.0",
"manifest_version" : 2,
"description" : "Opens the last downloaded file",
"background" : {
"scripts" : ["background.js"]
},
"icons" : {
"64" : "icon.png"
},
"browser_action" : {
"default_icon" : "icon.png",
"default_title" : "Last Download"
},
"permissions" : [
"background",
"downloads",
"downloads.shelf",
"storage"
]
}

背景.js

var State=false;
chrome.downloads.onChanged.addListener(function(delta) {
chrome.downloads.setShelfEnabled(false);
if (delta.state.current == 'in_progress'){
State=true;
}
else if (delta.state.current == 'complete'){
State=false;
chrome.storage.local.clear;
chrome.storage.local.set({'lastDownloaded' : delta});
chrome.downloads.show(delta.id);
}
chrome.downloads.setShelfEnabled(true);
});
function click(){
if (State==false){
chrome.storage.local.get('lastDownloaded' , function(result){
chrome.downloads.search({id : result.lastDownloaded.id}, function(file){
if (file[0].exists == false) {
chrome.storage.local.clear;
chrome.downloads.showDefaultFolder();
}
else if (file[0].exists == true){
chrome.downloads.show(result.lastDownloaded.id);
}
});

});
}
if (State==true){
chrome.tabs.create({url: "chrome://downloads/"});
}
}
chrome.browserAction.onClicked.addListener(click);

最佳答案

statedownloadDelta 的可选属性目的。当您收到错误时,该属性不存在。它是未定义的。因此,当您尝试使用 delta.state.current 时,您正在尝试获取未定义属性的 current 属性,这会生成您所看到的错误。

您需要查看 delta 对象上的可用属性,看看除了缺少 state 属性之外,哪些属性可以为您提供信息当您处于这种情况时,您需要执行您想要执行的任何操作。下载/用户交互。您可以通过使用调试器的正常调试方法来完成此操作,或使用 console.log(delta) 来提供该信息。然后,您将存在的属性及其值与您要处理的状态相关联,并测试这些属性是否为这些值。

如果您只是想避免该错误,则应该检查 state 属性是否存在。如果需要,您可以测试 delta.state 的计算结果是否为 true。但是,鉴于您正在获取它的属性,最好检查它是否是一个对象而不是 null:

if(typeof delta.state === 'object' && delta.state !== null) {
if (delta.state.current == 'in_progress'){
State=true;
} else if (delta.state.current == 'complete'){
State=false;
chrome.storage.local.clear;
chrome.storage.local.set({'lastDownloaded' : delta});
chrome.downloads.show(delta.id);
}
} else {
//This is the condition under which you are getting your error. you need to determine
// what you want to do here, if anything.
console.log('downloads.onChanged: In a state not specifically handled. delta=',delta);
}

关于javascript - downloads.onChanged 的​​事件处理程序中出现错误 : TypeError: Cannot read property 'current' of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42894259/

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