观察者

历史上,每个成功的操作都会通过 nsINavBookmarksObserver 接口进行通知。要监听此类通知,您必须使用 nsINavBookmarksService 的 addObserver 和 removeObserver 方法进行注册。请注意,书签添加或顺序更改不会为索引发生更改的项目触发 bookmark-moved 事件。类似地,未显式执行的 lastModified 更改(例如更改其他属性)不会为 lastModified 属性触发 onItemChanged 通知。

但是,目前我们正在实施 Places Observers 系统来更改 nsINavBookmarksObserver 接口。

通常 - 观察者模式遵循订阅模型。订阅者(通常称为观察者)订阅发布者(通常称为主题)处理的事件或操作,并在事件或操作发生时收到通知。

每个成功的操作都会被观察者注意到这些事件,并传递给订阅者。

PlacesObservers.webidl 是一个全局单例,它提供观察或通知所有事件的实用程序。 PlacesEvent.webidl 指明了所有可能的事件类型并描述了它们的特征。在我们的例子中,事件是

  • “page-visited” - data: PlacesVisit 每当访问页面时触发

  • “bookmark-added” - data: PlacesBookmarkAddition 每当创建书签(或书签文件夹/分隔符)时触发。

  • “bookmark-removed” - data: PlacesBookmarkRemoved 每当删除书签(或书签文件夹/分隔符)时触发。

  • “bookmark-moved” - data: PlacesBookmarkMoved 每当移动书签(或书签文件夹/分隔符)时触发。

  • “bookmark-guid-changed” - data: PlacesBookmarkGuid 每当书签 guid 更改时触发。

  • “bookmark-keyword-changed” - data: PlacesBookmarkKeyword 每当书签关键字更改时触发。

  • “bookmark-tags-changed” - data: PlacesBookmarkTags 每当书签的标签更改时触发。

  • “bookmark-time-changed” - data: PlacesBookmarkTime 每当通过书签 API 显式更改书签的 dateAdded 或 lastModified 时触发。当创建书签时,或者当书签的属性(例如标题)更改时,此通知不会触发,即使 lastModified 会作为该更改的结果而更新。

  • “bookmark-title-changed” - data: PlacesBookmarkTitle 每当书签标题更改时触发。

  • “bookmark-url-changed” - data: PlacesBookmarkUrl 每当书签 URL 更改时触发。

  • “favicon-changed” - data: PlacesFavicon 每当收藏夹图标更改时触发。

  • “page-title-changed” - data: PlacesVisitTitle 每当页面标题更改时触发。

  • “history-cleared” - data: PlacesHistoryCleared 每当清除历史记录时触发。

  • “page-rank-changed” - data: PlacesRanking 每当页面排名更改时触发。

  • “page-removed” - data: PlacesVisitRemoved 每当删除页面或其访问记录时触发。当从存储中删除页面(因为它没有更多访问记录或书签)时,可能会调用此方法。当删除所有或部分页面访问记录但页面本身未从存储中删除时,也可能会调用此方法,因为它可能是书签。

  • “purge-caches” - data: PlacesPurgeCaches 每当发生无法通过其他通知观察到的更改时触发,例如数据库修复。收到后,观察者,尤其是数据视图,应删除任何缓存并从头开始重新加载。