困难访问对象属性在Javascript从Chrome扩展下载API

Difficulty accessing object property in Javascript from Chrome Extension Downloads API

本文关键字:Chrome 扩展 下载 API Javascript 访问 对象 属性      更新时间:2023-09-26

下面的代码是chrome下载API从这里

dictionary StringDelta {
        DOMString? previous;
        DOMString? current;
    };

[inline_doc] dictionary DownloadDelta {
    //other things
    StringDelta? error; // what i'm trying to access
}

我试图使一个chrome扩展,当我试图访问'downloadDelta。如下所示,我得到"未定义"。

 chrome.downloads.onChanged.addListener(function(downloadDelta) {
    console.log(downloadDelta.error); 
 }
 );

我不知道那个问号或DOMString是什么意思。文档中说'error'是可选的

IDL中的问号表示所有这些东西都是可选的,就像您链接到的API文档一样。

例如,DownloadDelta.errorundefined,除非产生它的更改实际上是一个中断,该中断将DownloadItem.error更改为downloadDelta.id所指示的DownloadItem。一次下载可能有很多更改事件,但永远不会设置错误,或者在DownloadItem状态的许多更改中只设置一次错误。

一个DOMString是一个正常的(文档对象模型)字符串,这意味着字符串是适合使用你的扩展在其JavaScript/HTML/CSS上下文中。实现可以访问自己语言和库中的许多其他类型的string,这些类型可能是不兼容的。

由于DownloadDelta中唯一永久的是相关DownloadItemid,因此您的onChange回调通常有两种操作:

  1. 注意DownloadDelta中特定的东西,如错误,只有当你需要在它们改变时对它们做出一次反应,而不需要在这样做时考虑项目的其余下载状态

  2. 调用chrome.downloads.search({'id':downloadDelta.id}, callback2)callback2检查downloadItem的整个状态,并采取您希望依赖于downloadItem状态的多个方面的操作,这些方面可能会独立变化(因此在独立的DownloadDelta s中)。

当然,只有当增量表明DownloadItem可能已经潜在地转换为准备好执行您想要执行的操作时,您才可以通过检查增量来有选择地使用callback2设置搜索,从而将它们组合在一起。