Managing History
WebHistory
and WebHistoryItem
objects are used to maintain a history of all the pages a user visits. WebHistoryItem
encapsulates all the information about a page that has been visited, and WebHistory
maintains an ordered collection of these history items. WebHistory
doesn’t just maintain a linear list. It also keeps track of the days on which a user visits pages. Therefore, you can group and present history items to users by day. For example, you can use submenus to group history items by the last three visited days.
Sharing History Objects
WebHistory
objects are not automatically created by WebKit. You enable the history feature by creating a WebHistory
object and assigning it to your WebView
object.
You can create WebHistory
objects in one of two ways. You can assign each WebView
object its own WebHistory
object, or you can create one WebHistory
object that is shared by all WebView
objects in your application as in:
// Create a shared WebHistory object |
WebHistory *myHistory = [[WebHistory alloc] init]; |
[WebHistory setOptionalSharedHistory:myHistory]; |
Adding and Removing History Items
Like back-forward lists, history items are automatically added to the WebHistory object as the user navigates the web. If an item with the same URL already exists in the list, then it is replaced with the newer item even if the previous item was visited on a different day. Consequently, if the user revisits a URL it is always moved to the top of the list. Otherwise, items are not removed from the history list unless your application explicitly removes them.
For example, you could implement a clear history action by sending removeAllItems
to your WebHistory object as in:
// Removes all the history items |
- (IBAction)clearHistory:(id)sender |
{ |
[[WebHistory optionalSharedHistory] removeAllItems]; |
} |
After removing all the items, the removeAllItems
method posts a WebHistoryAllItemsRemovedNotification
notification. The addItems:
and removeItems:
methods post similar notifications. You typically observe these notifications to update your display of history items as follows:
// 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]; |
The userInfo
attribute of these notifications is an array containing the added or removed items. For example, you might implement the historyDidAddItems:
method to add a corresponding menu item to your History menu for each new history item in the userInfo
array.
Loading a History Item
Once the user has the ability to select a history item to load, you need to implement an action to perform the load. You send loadRequest:
to the main frame of the appropriate WebView object, passing the selected WebHistoryItem’s URL string as the argument. The following example assumes historyItem
is the selected WebHistoryItem object:
- (void)goToHistoryItem:(id)historyItem |
{ |
// Load the history item in the main frame |
[[webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[historyItem URLString]]]]; |
} |
Saving and Loading History Objects
Unlike WebBackForwardList objects, WebHistory objects can be persistent—that is, they can be loaded from and saved to a writable URL. You send loadFromURL:error:
to a WebHistory object to load history items from a readable URL, and you send saveToURL:error:
to a WebHistory object to save history items to a writable URL.
Copyright © 2003, 2012 Apple Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2012-11-09