Управление историей
Ссылка класса WebHistory и объекты Ссылки класса WebHistoryItem используются для поддержания истории всех страниц, которые посещает пользователь. WebHistoryItem инкапсулирует всю информацию приблизительно страница, которую посетили, и WebHistory поддерживает упорядоченный набор этих элементов истории. WebHistory только ведет линейный список. Это также отслеживает дни, в которые пользователь посещает страницы. Поэтому можно сгруппировать и представить элементы истории пользователям за день. Например, можно использовать подменю для группировки элементов истории на прошлые три посещаемых дня.
Совместное использование объектов истории
Объекты WebHistory автоматически не создаются WebKit. Вы активируете опцию истории путем создания объекта WebHistory и присвоения ее объекту веб-представления.
Можно создать объекты WebHistory одним из двух способов. Можно присвоить каждый объект веб-представления его собственный объект WebHistory, или можно создать один объект WebHistory, совместно использующийся всеми объектами веб-представления в приложении как в:
// Create a shared WebHistory object |
WebHistory *myHistory = [[WebHistory alloc] init]; |
[WebHistory setOptionalSharedHistory:myHistory]; |
Добавление и удаление элементов истории
Как прямые спиной списки, элементы истории автоматически добавляются к объекту WebHistory, поскольку пользователь перемещается по сети. Если элемент с тем же URL уже существует в списке, то это заменяется более новым элементом, даже если предыдущий элемент посетили в различный день. Следовательно, если пользователь пересматривает URL, это всегда перемещается в верхнюю часть списка. Иначе, элементы не удалены из списка предыстории, если Ваше приложение явно не удаляет их.
Например, Вы могли реализовать ясное действие истории путем отправки removeAllItems
к Вашему WebHistory возражают как в:
// Removes all the history items |
- (IBAction)clearHistory:(id)sender |
{ |
[[WebHistory optionalSharedHistory] removeAllItems]; |
} |
После удаления всех элементов, removeAllItems
метод отправляет a WebHistoryAllItemsRemovedNotification
уведомление. addItems:
и removeItems:
методы отправляют подобные уведомления. Вы обычно наблюдаете, что эти уведомления обновляют Ваш дисплей элементов истории следующим образом:
// Observe WebHistory notifications |
nc = [NSNotificationCenter defaultCenter]; |
[nc addObserver:self selector:@selector(historyDidRemoveAllItems:) |
name:WebHistoryAllItemsRemovedNotification object:myHistory]; |
[nc addObserver:self selector:@selector(historyDidAddItems:) |
name:WebHistoryItemsAddedNotification object:myHistory]; |
[nc addObserver:self selector:@selector(historyDidRemoveItems:) |
name:WebHistoryItemsRemovedNotification object:myHistory]; |
userInfo
атрибут этих уведомлений является массивом, содержащим добавленные или удаленные элементы. Например, Вы могли бы реализовать historyDidAddItems:
метод для добавления соответствующего пункта меню к меню History для каждого нового элемента истории в userInfo
массив.
Загрузка элемента истории
Как только у пользователя есть возможность выбрать элемент истории для загрузки, необходимо реализовать действие для выполнения загрузки. Вы отправляете loadRequest:
к основному кадру надлежащего объекта веб-представления, передавая строку URL выбранного WebHistoryItem как параметр. Следующий пример принимает historyItem
выбранный объект WebHistoryItem:
- (void)goToHistoryItem:(id)historyItem |
{ |
// Load the history item in the main frame |
[[webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[historyItem URLString]]]]; |
} |
Сохранение и загрузка объектов истории
В отличие от объектов WebBackForwardList, объекты WebHistory могут быть персистентными — т.е. они могут быть загружены из и сохранены к перезаписываемому URL. Вы отправляете loadFromURL:error:
к объекту WebHistory загрузить элементы истории из читаемого URL, и Вы отправляете saveToURL:error:
к WebHistory возражают для сохранения элементов истории к перезаписываемому URL.