History and the TravelLog

Internet Explorer keeps track of your browsing history in two ways.

The active tab’s list of the back/forward navigations is called the TravelLog. You can see this list with a click-and-hold on the back or forward arrow:

image

The list of pages you’ve visited across all browser sessions is called History. You can see it by tapping CTRL+H:

image

While these two lists are related, they differ in significant ways.

Historical Oddities

This post was prompted by a recent MSDN Forum question asking why Facebook pages don’t appear in the History list in IE10.

I’d never noticed that before, but I had noticed (and was greatly annoyed by) the fact that inline-autocomplete of the Facebook URL never worked in the IE address bar. Instead, only the domain suggestions were shown in the dropdown, no matter how many times I visited Facebook:

image

A quick look at the response headers sent by Facebook’s servers revealed the problem. All of Facebook’s HTTPS pages send Cache-Control: no-store and Pragma: no-cacheheaders. In IE10 and lower, these headers, when present on a HTTPS response, prevent the addition of the delivering page to the history list.

You can explore this effect by opening the History pane (hit CTRL+H and click the imageicon) and visiting my simple Browser History test page and the pages linked therein. You’ll find that in IE10, only two of the pages are recorded in the history list because the caching directives on the final two pages in the list prevent their addition to the history.

image

While these pages aren’t stored in the History list, they do continue to appear within the TravelLog:

image

 

IE11 Improvement

In Internet Explorer 11, the behavior of the history list has changed. IE11’s History list logs pages regardless of their caching directives, as you can see when running the same testcase in IE11 on Windows 8.1:

image

…and Facebook now properly auto-completes within the address bar:

image

Other Trivia

This section will grow over time.

  • If you want to omit a page from the TravelLog (but not History), navigate away from the page using the location.replace method.
  • If you want fine-grained control of the TravelLog, check out the HTML5 History API.
  • Native code interacts with the History list using the IUrlHistoryStg2 interface.

 

-Eric