TJKDesign: Home Page
Creative Commons License
This work is licensed under a
Creative Commons License.

If you've found this beneficial, consider making a donation through Paypal

Guild of Accessible Web Designers Logo
Valid XHTML 1.0!
Section 508
Web Standards
Tables-less Layout
Frames: a solution or a problem?
XML Feed
NN4.7 Safe!
Give it a Try!

Problems & Fixes

Be aware that some of the solutions explained here may create their own issues.
i.e., JavaScript provides ways to fix some of the problems mentioned below but some browsers don't support JavaScript [and in those that do, JavaScript may be disabled].

Accesskey: J
Problems related to Frames
The issues I'm thinking of... Is it bad? Is there a fix?
Frames incapable browsers... Really bad Sort of
History object not working as expected... Not really Not really
The title of framed pages doesn't appear at the top of the window... No Yes
Sending the link to a framed page to someone... Yes Yes
Reloading the URL in the address bar... Yes Sort of
Accessibility issues for the disabled... Yes Sort of
Bookmarking... Yes  Sort of
Printing... Not really  Yes
0rphan Pages [pages returned by SE in an unframed state]... Yes  Yes
Search engines RANKING!... Yes  Yes
Using functions inside the browser's Menus ... Yes Sort of
Using keyboard shortcuts... Yes No
NN4x positioning of frame borders ... Yes
Not really

frames incapable browsers:

Browsers are "frames enabled" since NN2/MSIE3; it is, however, possible to turn frames "off" in some modern browsers.

» What to do: The <noframes> tag is there as a "no-frames" alternative; it allows the browser to display valuable content for users with older browsers [or modern ones with frames turned "off"].
Learn more about the <noframes> tag here.

History Object getting stuffed:

There is no "intuitive" navigation with frames; it is very easy to get the users confused because their browsing experience is not "sequential". If a link loads more than 1 document at a time [in different frames], one click on the browser's back or forward button won't bring back the correct frameset state [Opera V6.05 seems to handle this issue better].

» What to do: Instead of using JavaScript, one should link to a frameset. A frameset loads more than 1 document but creates only 1 entry in the history object.

Take note Reloading a frameset [using the browser's "go" button] may also be disturbing for the user with regard to where he/she has been or where he/she is heading.

The title of framed pages doesn't appear at the top of the browser window:

By default, documents that load inside frames don't affect the title displayed at the top of the browser window. The title corresponds to the document loaded in the topmost window [the frameset].

» What to do: One can include the following script between the head tags of each document:

<script language="javascript">
// make sure to place this script AFTER the title container
top.document.title = document.title;
</script>

Take note Doesn't work with every browser.

Sending the link to a framed page to someone:

The browser's built-in feature sends the URL from the address bar.
The recipient of the email accesses the frameset with its default documents for each frame instead of accessing a particular frameset state.

» What to do: If you want the browser's built-in feature to work as expected, take a look at "Raising The Bar" [Section 5].

A less dramatic solution is to create a "send this page to a friend" as an alternative for the user to the browser's built-in feature. To implement this, you'll need to include a "frames-reunion" script into your document [see Section 5].

Reloading the URL in the address bar:

When the user clicks on his/her browser's "go" button, the frameset reloads every single frame with its "default" document [src property value] - which means that the frameset state is lost.

» What to do: To maintain a sequential frameset state, take a look at "Raising The Bar" [Section 5].

Accessibility issues for the disabled:

There are accessibility issues for the disabled using assistive technology or adaptive strategy; unfortunately, Section 508 Guidelines don't seem to address the "frames" issue.

» What to do: Always include the title attribute in every frame tag to facilitate frame identification and navigation:
i.e. <frame src="navigation.htm" title="Title and main navigation bar frame">
It is also possible to use the longdesc attribute to provide a long description of the frame.

A few links to visit:

Bookmarking:

The browser's built-in feature bookmarks the URL from the address bar instead of a particular frameset state.
When the user returns to the bookmarked page he only gets the default frameset instead of accessing the original frameset state.

» What to do: If you want the browser's built-in feature to work as expected, take a look at "Raising The Bar" [Section 5].

Printing:

The most recent browsers have given you options on whether you want the full frameset printed or an individual page, but printing framed pages is still tricky.

» What to do: Give the user a better alternative than the browser's built-in feature by including in your document a link to a "printer friendly" page.

When printing other frames in Explorer it is necessary to put the focus on them first:

parent.framename.focus(); parent.framename.print();

Take note Murray Summers' plug:
Doesn’t work in Mac IE5x, however...

0rphan Pages [in an unframed state]:

Search Engine results can be linked to documents that are not supposed to be loaded in a browser window without their parent frame[s]. These documents are difficult to use when accessed outside their intended frameset [i.e. without the navigation frame].

» What to do: See Section 5, GOING DYNAMIC...

Search engine RANKING!:

The default page of a web site is a very important document for most of the Search Engines [SE].
SE index the <noframes> content and any content that is accessible via that content.
Unfortunately, many Web Designers don't include the <noframes> pair tags in their frameset code or limit its content to the simple words "Your browser doesn't support frames".
Because of this, SE can't find valuable content or links to crawl.

» What to do: Use the <noframes> tag to provide a good description of your site and also feed this content with links to pages within the site. By doing this, you will help some SEs to crawl past your frameset document.
Click here to learn how to use the <noframes> tag.
Visit Spider Food to read about Search Engine Optimization and frames.


Using functions inside the browser's Menus bar [Edit > Find, View > Source, etc.]:

The behavior of some functions in the Menus goes against user's expectations.

» What to do:There are some scripts that one should use to provide the users with links to easily access the "search" and "view" features inside frames.
ie. to mimic the browser's "View Source" feature, one can have a link with the following:

onClick="window.location='view-source:'+window.location.href"

  Using Keyboard Shortcuts:

Because Keyboard Shortcuts rely on focus, using them with a frameset can be a very deceptive experience for the user.

» What to do: As far as I know there is no real workaround for this issue.

  NN4x positioning of frame borders:

With NN4 some frame dimensions are simply impossible to achieve, hence trying to align images or page elements in this browser cannot work.
NN4x calculates the position of its frame boundaries by factoring the placement based on the viewport size. In the process of doing this, if a fractional result is obtained, the value is TRUNCATED before the frame is placed. As a result, there are some frame dimensions that simply cannot be achieved [see the Fantastic frame-a-tron by Murray Summers].

» What to do: Make sure your design takes into consideration possible inacurate frames position.