[whatwg] Proposal: target="_reference"

Matthew Paul Thomas mpt at myrealbox.com
Sat Apr 26 05:24:29 PDT 2008

Summary: I propose target="_reference", which would open a link in a 
secondary viewport, for example a closable pane at the bottom of a 
browser window. This would be much less annoying and intimidating than 
target="_blank". It could be used immediately for providing help, and 
for linking to privacy policies, terms of use, etc within forms. 
Eventually it could also be used for footnotes and endnotes.

On Apr 21, 2008, at 6:21 AM, Ian Hickson wrote:
> ...
> On Sat, 28 Apr 2007, Lachlan Hunt wrote:
> ...
>> * Opening help windows. e.g. for help with forms.
>>   - There are much more user friendly ways of offering help to users
>>     without popups.
> ...
> I agree with your comments.
> ...
> I've changed the spec to make _blank legal but to also encourage 
> browsers to not create a new window when one is requested.

I've just come across this problem myself when designing a Web site's 
help system.

For a vanilla form -- a vertical series of labelled text fields, 
checkboxes, and so on -- there are indeed friendlier ways of offering 
help than in a popup window. For example, a "(What's this?)" link next 
to a control might make visible a section under the control containing 
extra help, without obscuring the rest of the form. That is what we 
planned initially.

But in a page that's less like a form and more like an application, 
there often isn't room to do this. The example that defeated our 
expanding-section plan was needing to explain the eight possible 
choices for a <select> menu, where the menu was the sole contents of 
each cell in a table column. The help link for that belonged in the 
column's header cell, but then where should the help itself appear? Not 
enough room in the header cell, or anywhere else in the table itself. 
And displaying it below the table risked it being off-screen and not 
seen, if the table was tall enough. There's a similar problem with help 
links that appear in any small sidebar or other narrow area.

So our current plan is to use a Facebook-style fake popup window, a box 
that floats above the rest of the page content and is dismissed with an 
"OK" button. This has two important advantages over target="_blank":
*   If you close or navigate away from the page, the help doesn't need
     to be closed separately.
*   If you switch to a different window or tab, the help isn't flopping
     around unneeded.

But it also has three disadvantages compared with target="_blank":
*   It's impossible to arrange the application and the help side by
     side, such that they don't obscure each other.
*   Whatever interface we provide for closing the help "window", it's
     inconsistent with someone's platform conventions, and inconsistent
     with other Web sites that do something similar.
*   It's literally thousands of times harder to implement.

What would an interface look like that avoided these disadvantages? It 
would disappear whenever the page was closed, navigated away from, or 
switched away from. It wouldn't obscure the page content. It would be 
consistent with platform conventions. And it would be just as easy for 
authors to implement as target="_blank" is.

The obvious solution, for large-screen browsers, is a pane that appears 
at the bottom of the browser window -- like the docked palettes in some 
drawing programs, or the Firebug add-on in Firefox. This pane would 
disappear along with the rest of the page as soon as you went to a new 
page. The browser would be in charge of giving it a Close button that 
matches OS conventions. And a browser might also (but wouldn't need to) 
let you drag it from the bottom to the side of the window, or even 
undock it into its own floating window (though this should still 
disappear when you closed the main page or navigated to another page).

For small-screen browsers, such as those in phones, it would be a 
separate screen that -- unlike target="_blank" -- had a 
browser-supplied "OK" button, and when closed always returned you to 
the screen whence it was opened, preferably in exactly the state it was 
in when you left it.

To support this, I propose target="_reference", referring to a 
secondary viewport that is strongly associated with the primary 
viewport from which it is opened. A browser must provide an obvious 
mechanism for closing this secondary viewport separately from the 
primary one; for the author to do so should be non-conformant. And if 
the primary viewport is closed, or navigates to a new resource (not 
just a separate fragment of the same resource), the secondary viewport 
should close automatically.

Only one secondary viewport should be available per primary viewport: 
within the secondary viewport, target="_reference" should refer to the 
same viewport, not to a new one.

Web application developers could start using target="_reference" 
immediately for providing help, since the way current browsers treat it 
-- opening a separate window -- would be an acceptable fallback. (If 
developers didn't consider it acceptable fallback, they could use 
script to replace the new-window behavior with fake-popup behavior in 
legacy browsers.)

As a bonus, once it was widely supported, document authors could also 
start using target="_reference" for footnotes and endnotes. This would 
be much better than most existing footnote/endnote mechanisms, in that 
the browser wouldn't scroll or navigate away from the original text 
while showing the note. This in turn would make it much easier to 
implement than existing footnote/endnote mechanisms: authors wouldn't 
need to provide special "Back to article" links, or insert dummy 
id=/name= attributes to serve as the targets of those links. It would 
work equally well regardless of where the note text was placed -- at 
the end of a <section>, at the end of the page, or even on a separate 
page. And it wouldn't even require adding any new elements or 
attributes to HTML.

> ...
> On Mon, 30 Apr 2007, Matthew Paul Thomas wrote:
>> For example, forms sporting those "By submitting this form you accept
>> our __terms of service__ and __privacy policy__" links I mentioned
>> earlier are quite often sent over HTTPS. These are not cached by
>> mainstream browsers, because the browser vendors have caved to bank
>> Webmasters who threatened to block them if they were too 
>> HTTP-compliant. So if such a browser was configured to open those 
>> links in the same window, it would necessarily forget everything 
>> you'd entered in the form, which would be annoying.
> Yes, one change (reusing the same window) would also require another
> (caching forms in session history). I'm ok with both of these! :-)

So am I. But without finding a way for browsers to escape the economic 
trap of losing market share through being blocked by major sites, 
that's just not realistic.

However, target="_reference" would solve this problem resoundingly. You 
could read through the terms of service and/or privacy policy in the 
same window, without the form disappearing out of the cache. There 
would be no more panic, from people with maximized browser windows, 
thinking the form had disappeared and their input with it. And as a 
bonus, you wouldn't even need to close the terms/policy window 
separately from submitting the form.

>> If _blank is allowed, I would prefer the specification to discourage
>> authors from using _blank when another solution is practical (e.g. 
>> using a <details> element in the original page), and encourage UAs to 
>> indicate when a link will open in a different top-level browsing 
>> context (e.g. by double-underlining instead of single-underlining).
> Where would you like such encouragements? I'm worried that the former 
> will get lost easily,

Immediately following the definition of _blank. (Where else did you 
have in mind?)

> and that the second is basically impossible to implement reliably due 
> to scripting (though Safari tries).
> ...

Safari's designers seem to agree with me that it's helpful even if it's 
not completely reliable.

Matthew Paul Thomas

More information about the whatwg mailing list