17.6. Tricks with Windows and Frames
For the vast majority of links in your documents, you'll want the newly loaded document displayed in the same window, replacing the previous one. That makes sense, since your users usually follow a sequential path through your collection.
But sometimes it makes sense to open a document in a new window, so that the new document and the old document are both directly accessible on the user's screen. If the new document is related to the original, for instance, it makes sense to have both in view. Other times, you might want to open more than one document in multiple windows in a frameset. More commonly, the new document starts the user down a new web of documents, and you want them to see and remember where they came from.
Regardless of the reason, it is easy to open a new browser window from your document. All you need to do is add the target attribute in the appropriate hyperlink (<a>) tag.
17.6.1. Targeting Windows
We normally use the target attribute to load a document into a specific frame that you've named in a frameset. It also serves to create a new window by one of two methods:
17.6.2. Overriding Others' Targets
Ever visited a site whose home page is a frame document that never gives up? You know, the kind that leaves its great big logo on the top of the window and its site TOC running down the side of the display, staring you in the face long after you've hyperlinked away from the site? What if your site's frameset gets trapped into one of their window frames? What to do? (Apparently their webmasters hadn't heard about the _blank target.)
17.6.3. Multiple Frames in One Link
Loading a new document from a hyperlink is a snap, even if you put the new document into an alternative frame or window from its hyperlink parent. Occasionally, though, you'll want to load documents into two frames when the user clicks just one link. With a bit of trickery you can load two or more frames at one time, provided they are arranged a certain way in the browser window.
Consider this frame layout:
<frameset rows=2> <frameset cols=2> <frame name=A> <frame name=B> </frameset> <frameset> <frame name=C> <frame name=D> </frameset> </frameset>
If someone clicks a link in frame A, the only thing you can do is update one of the four frames. Suppose you wanted to update frames B and D at the same time?
The trick is to replace frames B and D with a single frame, like this:
<frameset cols=2> <frameset rows=2> <frame name=A> <frame name=C> </frameset> <frame name=BD> </frameset>
Ahah! Now you have a single target in which to load a single document, frame BD. The document you load should contain the original frames B and D in one column, like this:
<frameset cols=2> <frame name=B> <frame name=D> </frameset>
The two frames will fill frame BD. When you update frame BD, both frames will be replaced, giving the appearance of two frames being updated at one time.
The drawback to this is that the frames must be adjacent and able to be grouped into a single document. For most pages, though, this solution works fairly well.
We've only scratched the surface of HTML and XHTML tips and tricks here. Our advice: keep hacking!
Copyright © 2002 O'Reilly & Associates. All rights reserved.