spacer

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

home / experts / javascript / column31


URL Manipulation

Developer News
Microsoft Shows Off Silverlight 4, IE9 Plans
Metasploit Expands Vulnerability Test Framework
HyperCard Reborn?

Internet Explorer suffers from a deficiency that you cannot assign a URL to a Dynamic HTML element's content. You can assign a string to the innerHTML or outerHTML properties of a Dynamic HTML, as we have explained in column 13, Scrolling JavaScript Banners:

whichEl.innerHTML = newsStr;

But strings are not flexible enough. Our algorithm calls for feeding firstPage and secondPage from an external file that can be updated from time to time. The solution is to load the external feed onto the page somehow, and then extract the messages from it. We use the IFRAME tag to load the page. Somewhere on your page put:

and then detect it from within the script by homing on the first IFRAME tag of the page and assigning the external URL to it:

document.all.tags("IFRAME").item(0).src = 'jscolumns3ie.html';

We want now to extract the HTML content of the file and insert it in firstPage and secondPage. The problem is that we cannot access the external file until it is loaded. But how can we know the external file is loaded? We have solved this problem by adding the onload event handler to the external file and coded the event handler to call a function in its parent window, thus allowing the continuation of the algorithm. Here is the event handler in the external file:

<SCRIPT LANGUAGE="JavaScript1.2">
<!--
var pause = 100;

function start() {
  setTimeout("parent.fillCanvas()", pause);
}

window.onload = start;
//-->
</SCRIPT>

The fillCanvas() function is in the main page's script. The external file calls the main page after a pause number of milliseconds. We found this delay to be crucial in assuring a single call to fillCanvas().

In the main page, the sequence of events are as follows. First, the onload event is defined as:

onload = startCanvas; 

The function startCanvas() includes a single line in which it assigns the external file to the IFRAME tag:

function startCanvas() {
  if (NS4) return;
  document.all.tags("IFRAME").item(0).src = 'jscolumns3ie.html';
}

Nothing happens then, until the external file (jscolumns3ie.html) calls the fillCanvas() function, triggering the continuation of the code:

function fillCanvas() {
  arBody = document.frames(0).document.all.tags("BODY");
  makeCanvas();
  showMessage();
  scrollPages();
}

The first line extracts the BODY of the external file. Since the external file calls this function, any reference to document is a reference to the external file (jscolumns3ie.html). We then insert the BODY of the external file into firstPage and secondPage, by writing the DIV tags:

var text = '<DIV ID="canvas" STYLE="position:absolute">';
  text += '<DIV ID="firstPage" STYLE="position:absolute">'
   + arBody[0].innerHTML + '</DIV>';
  // (The above two lines should be joined as one line.
  // They have been split for formatting purposes.)
  text += '<DIV ID="secondPage" STYLE="position:absolute">'
   + arBody[0].innerHTML + '<DIV>';
  // (The above two lines should be joined as one line.
  // They have been split for formatting purposes.)
  text += '<';

http://www.internet.com

Produced by Yehuda Shiran and Tomer Shiran

internet.commediabistro.comJusttechjobs.comGraphics.com

Search:

WebMediaBrands Corporate Info

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

webref The latest from WebReference.com Browse >
Rolling Out Your Own HTML Application Version Control · HTML 5: Client-side Storage · Working with Ajax Server Extensions
Sitemap · Experts · Tools · Services · Email a Colleague · Contact FREE Newsletters 
 The latest from internet.com
Wi-Fi Product Watch, November 2009 · Chip Market Recovering From '08 Collapse · Low-Cost Tools to Kickstart Your New Business


Created: December 7, 1998
Revised: December 7, 1998

URL: http://www.webreference.com/js/column31/url.html