观察者¶
历史上,每个成功的操作都会通过 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
每当发生无法通过其他通知观察到的更改时触发,例如数据库修复。收到后,观察者,尤其是数据视图,应删除任何缓存并从头开始重新加载。