spacer

Webref WebRef   Sitemap · Experts · Tools · Services · Newsletters · About i.com

home / experts / javascript / tutorial1


Working with Windows

Developer News
ActiveState Debuts Open Source Business Suite
Salesforce Offers Visual App Builder
Codesion Steps Out From CVS's Shadow

Referencing the Opener

If you want to associate a link with a specific window, you can use the TARGET attribute of the <A> tag. A browser window doesn't have a name unless you assign it one. When you open a new window via a link with a TARGET attribute, you are assigning it an explicit name:

<A HREF="http://www.intel.com/" TARGET="review">Intel</A>

The preceding link opens a new window named review. The following link generates the same result via JavaScript:

<A HREF="http://www.intel.com/"
   onClick="window.open('http://www.intel.com/', 'review'); return false">Intel</A>

As you can see, assigning a name to a new window is very simple. But what about naming an existing window, or a user-generated window?

The name property of the window object lets you set the name of any window via JavaScript. If you want to launch a new window that will need to associate links and forms with the parent (opener) window, be sure to assign the opener a name:

window.name = "main";
var map = window.open("newpage.html", "map");

If you include the following link in newpage.html, it loads our front page in the parent window:

<A HREF="http://www.docjs.com/" TARGET="main">Doc JavaScript</A>

The opener Property

The opener property sets or retrieves a reference to the window that created the current window. When a source document opens a destination window by calling the open() method, the opener property (of the destination window's window object) specifies the window of the source document. This property persists across document unload in the opened window, so it can be accessed even if the URL in the new window is changed.

The opener property is a reference of the parent window's window object. You can take advantage of this property to perform any action on the opener window via a script in the new window. For example, use the following script in the destination document to change the background color of the window that opened it:

window.opener.document.bgColor = "beige";

If you've got sharp eyes, you probably noticed the problem with this statement. We must check if the opener window still exists before attempting to access its properties. Here's the correct code:

if (window.opener && !window.opener.closed)
  window.opener.document.bgColor = "beige";

The opener property is very useful, because it completes the bidirectional connection between the opener window and the opened window. Take a look at the following form field:

Enter your favorite tech stock:

Let's see how this works. First, here's the HTML code for the form:

<FORM NAME="stockForm">Enter your favorite tech stock:
<INPUT TYPE="text" NAME="stockBox" SIZE="10" VALUE="">
<INPUT TYPE="button" VALUE="list" onClick="showList()">
</FORM>

Notice that the name of the form is stockForm, while the name of the text field is stockBox. The "list" button launches the showList() function. We have also implemented an onUnload event handler in this document's <BODY> tag, which invokes the remLink() function. Here's the code for these two functions:

<SCRIPT LANGUAGE="JavaScript">
<!--

function showList() {
  sList = window.open("stocklist.html", "list", "width=150,height=210");
}

function remLink() {
  if (window.sList && window.sList.open && !window.sList.closed)
    window.sList.opener = null;
}

// -->
</SCRIPT>

The remLink() function sets the subwindow's opener property to null when the current document unloads. The script in the new window checks the opener property before assigning a value to the text field. We must use this function because the new window's script shouldn't try to access the text box if a different document has been loaded in this window.

Here's the HTML code for stocklist.html:

<HTML>
<HEAD>
<TITLE>Stock List</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--

function pick(symbol) {
  if (window.opener && !window.opener.closed)
    window.opener.document.stockForm.stockBox.value = symbol;
  window.close();
}

// -->
</SCRIPT>
</HEAD>
<BODY>
<TABLE BORDER="1" CELLSPACING="0" CELLPADDING="5">
<TR BGCOLOR="#cccccc"><TD><B>NYSE</B></TD><TD><B>NASDAQ</B></TD></TR>
<TR><TD><A HREF="javascript:pick('AOL')">AOL</A></TD>
<TD><A HREF="javascript:pick('CSCO')">CSCO</A></TD></TR>
<TR><TD><A HREF="javascript:pick('CPQ')">CPQ</A></TD>
<TD><A HREF="javascript:pick('INTC')">INTC</A></TD></TR>
<TR><TD><A HREF="javascript:pick('NOK')">NOK</A></TD>
<TD><A HREF="javascript:pick('SUNW')">SUNW</A></TD></TR>
<TR><TD><A HREF="javascript:pick('LU')">LU</A></TD>
<TD><A HREF="javascript:pick('AMZN')">AMZN</A></TD></TR>
<TR><TD><A HREF="javascript:pick('T')">T</A></TD>
<TD><A HREF="javascript:pick('MSFT')">MSFT</A></TD></TR>
</TABLE>
</BODY>
</HTML>

Next: How to create a dialog box

http://www.internet.com

Produced by Yehuda Shiran and Tomer Shiran


The Network for Technology Professionals

Search:

About Internet.com

Legal Notices, Licensing, Permissions, Privacy Policy.
Advertise | Newsletters | E-mail Offers

webref The latest from WebReference.com Browse >
Use Web Caching to Make Your Web Site Faster · Creating an Online Shopping Cart Mechanism in PHP · Log JavaScript Errors Using an AJAX-driven Web Service
Sitemap · Experts · Tools · Services · Email a Colleague · Contact FREE Newsletters 
 The latest from internet.com
Configuring Granular Settings for a Database Level Audit · The Perils of a Web 2.0 Transition on Your Business Processes · Facebook Redesigns Site —Again — Nears 400M Mark


Created: April 10, 2000
Revised: April 10, 2000

URL: http://www.webreference.com/js/tutorial1/opener.html