我是Chrome扩展程序的新手,我正在开发一个简单的扩展程序,用于打开上次下载文件的文件夹。如果文件已删除,则会打开下载文件夹。 每当我运行我的代码时,此错误都会登录到我的控制台。 有关如何改进我的代码的任何帮助表示赞赏。
的manifest.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"
]
}
background.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);
答案 0 :(得分:0)
state
是downloadDelta
对象的可选属性。当您收到错误时,该属性不存在。这是未定义的。因此,当您尝试使用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);
}