<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Code Couch &#187; JavaScript</title>
	<atom:link href="http://www.codecouch.com/tag/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.codecouch.com</link>
	<description>The ramblings of two code monkeys</description>
	<lastBuildDate>Thu, 19 Nov 2009 15:47:59 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Speed up your Javascript</title>
		<link>http://www.codecouch.com/2009/01/speed-up-your-javascript/</link>
		<comments>http://www.codecouch.com/2009/01/speed-up-your-javascript/#comments</comments>
		<pubDate>Mon, 26 Jan 2009 12:31:38 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.codecouch.com/?p=248</guid>
		<description><![CDATA[Nicolas Zakas (of Professional JavaScript, Second Edition fame) has a series of articles discussing improving Javascript performance - avoiding browsers complaining about long-running scripts. Some useful suggestions on how to optimise and chunk interactions.]]></description>
			<content:encoded><![CDATA[<p>I came across some very interesting and informative articles on Javascript performance improvement from Nicolas Zakas (the author of the newly released <strong>Professional JavaScript, Second Edition</strong> book):</p>
<ul>
<li><a href="http://www.nczonline.net/blog/2009/01/13/speed-up-your-javascript-part-1/">Speed up your Javascript part 1</a></li>
<li><a href="http://www.nczonline.net/blog/2009/01/20/speed-up-your-javascript-part-2/">Speed up your Javascript part 2</a></li>
</ul>
<p>This is an ongoing series of articles with specific Javascript examples that make sense.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codecouch.com/2009/01/speed-up-your-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Replacement for &#8220;bind&#8221; or &#8220;bindAsEventListener&#8221; in jQuery</title>
		<link>http://www.codecouch.com/2008/12/replacement-for-bind-or-bindaseventlistener-in-jquery/</link>
		<comments>http://www.codecouch.com/2008/12/replacement-for-bind-or-bindaseventlistener-in-jquery/#comments</comments>
		<pubDate>Mon, 15 Dec 2008 20:21:47 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Binding]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://www.codecouch.com/?p=238</guid>
		<description><![CDATA[Do you need to use the equivalent of Prototype's "bind" or "bindAsEventListener" in jQuery, passing through "this" context? Read on for more!]]></description>
			<content:encoded><![CDATA[<p>After working for many years with the Prototype JS framework, I decided it was time to bite the bullet and learn jQuery.</p>
<p>There were 3 reasons, really&#8230; 1: I&#8217;ve just started a new project and don&#8217;t need most of the bloat Prototype comes with; 2: I can now make a judgement call when it comes to choosing a framework; and 3: It&#8217;s another skill on my CV <img src='http://www.codecouch.com/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> )</p>
<p>I&#8217;ve just spent the weekend reading <a href="http://www.amazon.co.uk/gp/product/1933988355?ie=UTF8&#038;tag=codcou-21&#038;linkCode=as2&#038;camp=1634&#038;creative=6738&#038;creativeASIN=1933988355">jQuery in Action</a><img src="http://www.assoc-amazon.co.uk/e/ir?t=codcou-21&#038;l=as2&#038;o=2&#038;a=1933988355" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> cover-to-cover, and I can highly recommend it for intermediate or advanced developers looking to see what it offers.</p>
<p>The one thing I miss from Prototype however are the &#8220;bind&#8221; and &#8220;bindAsEventListener&#8221; commands which can set the context (&#8221;this&#8221;) of the callback &#8211; in my case, the instance of a class.</p>
<p>After a bit of searching, I found <a href="http://www.cosmocode.de/en/blogs/gohr/20060724110917/">this post by Andreas Gohr</a>. It was coderjoe&#8217;s comment that set the wheels in motion. He showed that you could rewrite this Prototype code:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="javascript" style="color: #000000;">initialize<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
	Event.<span class="me1">observe</span><span class="br0">&#40;</span>someEl<span class="sy0">,</span> <span class="st0">'click'</span><span class="sy0">,</span>
		<span class="kw1">this</span>.<span class="me1">doSomething</span>.<span class="me1">bindAsEventListener</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>
	<span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div></div>

<p>as this jQuery code:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="javascript" style="color: #000000;">init<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
	<span class="kw2">var</span> self <span class="sy0">=</span> <span class="kw1">this</span><span class="sy0">;</span>
	$<span class="br0">&#40;</span>someEl<span class="br0">&#41;</span>.<span class="me1">bind</span><span class="br0">&#40;</span><span class="st0">'click'</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span>eventData<span class="br0">&#41;</span> <span class="br0">&#123;</span>
		self.<span class="me1">doSomething</span><span class="br0">&#40;</span>eventData<span class="sy0">,</span> self<span class="br0">&#41;</span><span class="sy0">;</span>
	<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div></div>

<p>The bind (and related) method allows you to pass three parameters, however: the event type, some data, and a callback function. If the data parameter is omitted, the callback can be put as the second parameter.</p>
<p>So, we can re-write that last example using the second data parameter, removing the need to set a scoped variable:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="javascript" style="color: #000000;">init<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
	jQuery<span class="br0">&#40;</span>someEl<span class="br0">&#41;</span>.<span class="me1">bind</span><span class="br0">&#40;</span><span class="st0">'click'</span><span class="sy0">,</span> <span class="br0">&#123;</span>thisContext<span class="sy0">:</span><span class="kw1">this</span><span class="br0">&#125;</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span>eventData<span class="br0">&#41;</span> <span class="br0">&#123;</span>
		eventData.<span class="me1">data</span>.<span class="me1">thisContext</span>.<span class="me1">doSomething</span><span class="br0">&#40;</span>eventData<span class="br0">&#41;</span><span class="sy0">;</span>
	<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.codecouch.com/2008/12/replacement-for-bind-or-bindaseventlistener-in-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to create rollovers without using Javascript</title>
		<link>http://www.codecouch.com/2008/10/create-rollovers-without-using-javascript/</link>
		<comments>http://www.codecouch.com/2008/10/create-rollovers-without-using-javascript/#comments</comments>
		<pubDate>Sun, 19 Oct 2008 13:11:10 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Front-end]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.codecouch.com/?p=174</guid>
		<description><![CDATA[Using just CSS, you can do simple (and more complex) rollovers... no javascript required. This post shows how to apply this technique to your own pages with ease - whether it's a colour change or a more complex image swap.]]></description>
			<content:encoded><![CDATA[<p>You can make use of the <b>:hover</b> pseudo class on the anchor tag to change the anchor&#8217;s style attributes. Typically you see this on sites that underline anchors when you mouse over them (when you hover over them). The CSS code to do this simple underlining can look like this:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="css" style="color: #000000;">a <span class="br0">&#123;</span> <span class="kw1">text-decoration</span><span class="sy0">:</span> <span class="kw2">none</span><span class="sy0">;</span> <span class="br0">&#125;</span>
a<span class="re2">:hover</span> <span class="br0">&#123;</span> <span class="kw1">text-decoration</span><span class="sy0">:</span> <span class="kw2">underline</span><span class="sy0">;</span> <span class="br0">&#125;</span></pre></div></div></div>

<p>We could extend this to change the background and forground colour of the link to make it appear a little more &#8220;box-like&#8221; using something like this CSS code:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="css" style="color: #000000;">a <span class="br0">&#123;</span>
	<span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">block</span><span class="sy0">;</span>
	<span class="kw1">padding</span><span class="sy0">:</span> <span class="re3">5px</span> <span class="re3">10px</span><span class="sy0">;</span>
	<span class="kw1">background-color</span><span class="sy0">:</span> <span class="re0">#<span class="nu0">000000</span></span><span class="sy0">;</span>
	<span class="kw1">color</span><span class="sy0">:</span> <span class="re0">#FFFFFF</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
a<span class="re2">:hover</span> <span class="br0">&#123;</span>
	<span class="kw1">background-color</span><span class="sy0">:</span> <span class="re0">#CCCCCC</span><span class="sy0">;</span>
	<span class="kw1">color</span><span class="sy0">:</span> <span class="re0">#<span class="nu0">000000</span></span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div></div>

<p>If you wanted to have a background image on the anchor, then you could change the background-image when you hovered over the anchor. The CSS code might look like this:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="css" style="color: #000000;">a <span class="br0">&#123;</span>
	<span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">block</span><span class="sy0">;</span>
	<span class="kw1">padding</span><span class="sy0">:</span> <span class="re3">5px</span> <span class="re3">10px</span><span class="sy0">;</span>
	<span class="kw1">background</span><span class="sy0">:</span> <span class="re0">#<span class="nu0">000000</span></span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="re4">img/anchor_off<span class="re1">.gif</span></span><span class="br0">&#41;</span> <span class="kw2">no-repeat</span> <span class="kw1">left</span> <span class="kw1">top</span><span class="sy0">;</span>
	<span class="kw1">color</span><span class="sy0">:</span> <span class="re0">#FFFFFF</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
a<span class="re2">:hover</span> <span class="br0">&#123;</span>
	<span class="kw1">background</span><span class="sy0">:</span> <span class="re0">#CCCCCC</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="re4">img/anchor_hovered<span class="re1">.gif</span></span><span class="br0">&#41;</span> <span class="kw2">no-repeat</span> <span class="kw1">left</span> <span class="kw1">top</span><span class="sy0">;</span>
	<span class="kw1">color</span><span class="sy0">:</span> <span class="re0">#<span class="nu0">000000</span></span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div></div>

<p>This technique does suffer from a flaw, however. You will invariably see a flickering as you roll over the anchor for the first time due to the browser having to request the second image (assuming the file isn&#8217;t already in the browser cache).</p>
<p>This problem can be fixed by using the same image for both the normal and hover state of the anchor &#8211; just reposition the background image on hover. This is presented very well over at <a href="http://www.alistapart.com/articles/sprites/">A List Apart</a> where Dave Shea introduces the concept of CSS Sprites. The image below (195px wide, 30px high in size) shows how you might set this up:</p>
<p><img src="http://www.codecouch.com/wp-content/uploads/2008/10/cssbuttonbackground.gif" alt="" title="Anchor background sprites" width="195" height="30" /></p>
<p>The image above shows both states of the anchor&#8230; the initial state at the &#8220;left top&#8221; and the hovered state &#8220;100px&#8221; from the left of the image. The following CSS code shows how you can reposition the background image to show a different image on hover &#8211; without the flicker:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="css" style="color: #000000;">a <span class="br0">&#123;</span>
	<span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">block</span><span class="sy0">;</span>
	<span class="kw1">padding</span><span class="sy0">:</span> <span class="re3">5px</span> <span class="re3">10px</span><span class="sy0">;</span>
	<span class="kw1">width</span><span class="sy0">:</span> <span class="re3">95px</span><span class="sy0">;</span>
	<span class="kw1">height</span><span class="sy0">:</span> <span class="re3">30px</span><span class="sy0">;</span>
	<span class="kw1">overflow</span><span class="sy0">:</span> <span class="kw2">hidden</span><span class="sy0">;</span>
	<span class="kw1">background</span><span class="sy0">:</span> <span class="re0">#<span class="nu0">000000</span></span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="re4">img/anchor_background<span class="re1">.gif</span></span><span class="br0">&#41;</span> <span class="kw2">no-repeat</span> <span class="kw1">left</span> <span class="kw1">top</span><span class="sy0">;</span>
	<span class="kw1">color</span><span class="sy0">:</span> <span class="re0">#FFFFFF</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
a<span class="re2">:hover</span> <span class="br0">&#123;</span>
	<span class="kw1">background-position</span><span class="sy0">:</span> <span class="re3">100px</span> <span class="kw1">top</span><span class="sy0">;</span>
	<span class="kw1">background-color</span><span class="sy0">:</span> <span class="re0">#CCCCCC</span><span class="sy0">;</span>
	<span class="kw1">color</span><span class="sy0">:</span> <span class="re0">#<span class="nu0">000000</span></span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div></div>

<p>You may have to deal with all the anchor pseudo classes to get the effect consistent in all browsers, and be sure to define them in the correct order&#8230; :link, :visited, :hover, :active.</p>
<p>Finally, Internet Explorer only supports pseudo classes on the anchor element. All other browsers support pseudo classes on all elements. You could use this technique on non-anchor elements, but would be forced to introduce some javascript to support Internet Explorer. A good working example of this is the popular <a href="http://www.alistapart.com/articles/dropdowns">Suckerfish dropdowns</a> CSS menu solution that uses :hover on the list item element and attaches some javascript for Internet Explorer.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codecouch.com/2008/10/create-rollovers-without-using-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enabling cross-site scripting XSS via an iframe</title>
		<link>http://www.codecouch.com/2008/10/cross-site-scripting-xss-using-iframes/</link>
		<comments>http://www.codecouch.com/2008/10/cross-site-scripting-xss-using-iframes/#comments</comments>
		<pubDate>Sun, 19 Oct 2008 12:24:41 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Iframe]]></category>
		<category><![CDATA[XSS]]></category>

		<guid isPermaLink="false">http://www.codecouch.com/?p=173</guid>
		<description><![CDATA[Communication from an iframe that has content from a domain other than the one the iframe is contained within is a constant source of frustration - as browsers prevent this kind of activity due to built-in security policies. Here is a technique to perform cross-site scripting (XSS) in just such an environment with example code and a real-world example.]]></description>
			<content:encoded><![CDATA[<p>The scenario is relatively common &#8211; you have a page that contains an iframe pointing to some content hosted on another domain. Nothing wrong with this &#8211; iframes were designed with this in mind! The following diagram shows the sort of setup we are talking about.</p>
<p><img class="size-full wp-image-176" title="Iframed content diagram" src="http://www.codecouch.com/wp-content/uploads/2008/10/xssdiagraminitial.gif" alt="Diagram showing an iframe within a web page" width="394" height="186" /></p>
<p>Now you want to click a link within the iframe content and have that perform some action on the parent page (maybe you want to submit a form on the parent page, maybe you want to adjust the height of the iframe on the parent page). And you start getting frustrated because the browser won&#8217;t let you access all your javascript functions/properties on another domain.</p>
<p>Communication from an iframe that has content from a domain other than the one the iframe is contained within is a constant source of frustration &#8211; as browsers prevent this kind of activity due to built-in security policies. The solution is actually relatively painless requiring the addition of an iframe (see the following diagram).</p>
<p><img class="size-full wp-image-172" title="XSS Diagram" src="http://www.codecouch.com/wp-content/uploads/2008/10/xssdiagram.gif" alt="Diagram showing page structure for XSS via an iframe" width="394" height="186" /></p>
<div class="seeThrough h2Pod "><div class="seeThroughTop"><span class="tl"></span><span class="tr"></span><span class="t"></span></div><div class="seeThroughMiddle"><span class="r"></span><span class="l"></span><span class="m"></span><div class="seeThroughContent">
	<h2>Real world example</h2>
</div></div><div class="seeThroughBottom"><span class="bl"></span><span class="br"></span><span class="b"></span></div></div>

<p>You can see a working example of this over at <a href="http://movies.sky.com/cinema-finder" title="Sky Movies cinema finder page">Sky Movies</a> where the iframe is resized as the content within the iframe changes. This is being controlled from within the iframe.</p>
<p>Why do we need to implement a solution like this in the first place?</p>
<p>Because whilst the main page at movies.sky.com can set the height of the iframe, it cannot get the height of the iframe content&#8230; and the iframe document can get it&#8217;s height but it can&#8217;t set the height of it&#8217;s enclosing iframe.</p>
<div class="seeThrough h2Pod "><div class="seeThroughTop"><span class="tl"></span><span class="tr"></span><span class="t"></span></div><div class="seeThroughMiddle"><span class="r"></span><span class="l"></span><span class="m"></span><div class="seeThroughContent">
	<h2>An explaination of each component of the solution</h2>
</div></div><div class="seeThroughBottom"><span class="bl"></span><span class="br"></span><span class="b"></span></div></div>

<p>Using the following example pages, we can create a demonstration of this technique. Following is the source of the main page (marked as [1] in the figure above) which contains the iframe and the function that will be used to resize the iframe.</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="html4strict" style="color: #000000;"><span class="sc2"><span class="kw2">&lt;html&gt;</span></span>
<span class="sc2"><span class="kw2">&lt;head&gt;</span></span>
	<span class="sc2"><span class="kw2">&lt;title&gt;</span></span>Page hosted on example.com<span class="sc2"><span class="kw2">&lt;/title&gt;</span></span>
	<span class="sc2"><span class="kw2">&lt;script</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span><span class="kw2">&gt;</span></span>
	function resizeIframeHeight(nHeight) {
		var iframe = document.getElementById('mainIframe');
		iframe.setAttribute('height', nHeight);
	}
	<span class="sc2"><span class="kw2">&lt;/script&gt;</span></span>
<span class="sc2"><span class="kw2">&lt;/head&gt;</span></span>
&nbsp;
<span class="sc2"><span class="kw2">&lt;body&gt;</span></span>
	<span class="sc2"><span class="kw2">&lt;h1&gt;</span></span>This page is hosted on the example.com domain<span class="sc2"><span class="kw2">&lt;/h1&gt;</span></span>
	<span class="sc2"><span class="kw2">&lt;p&gt;</span></span>The iframe below is hosted on the example.org domain<span class="sc2"><span class="kw2">&lt;/p&gt;</span></span>
	<span class="sc2"><span class="kw2">&lt;iframe</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;mainIframe&quot;</span> <span class="kw3">width</span><span class="sy0">=</span><span class="st0">&quot;400&quot;</span> <span class="kw3">height</span><span class="sy0">=</span><span class="st0">&quot;200&quot;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;http://example.org/iframedDocument.html&quot;</span><span class="kw2">&gt;</span></span>Iframes not supported.<span class="sc2"><span class="kw2">&lt;/iframe&gt;</span></span>
<span class="sc2"><span class="kw2">&lt;/body&gt;</span></span>
<span class="sc2"><span class="kw2">&lt;/html&gt;</span></span></pre></div></div></div>

<p>Following is the source of the iframe page (marked as [2] in the figure above) which contains the extra iframe and some javascript that allows this technique to work.</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="html4strict" style="color: #000000;"><span class="sc2"><span class="kw2">&lt;html&gt;</span></span>
<span class="sc2"><span class="kw2">&lt;head&gt;</span></span>
	<span class="sc2"><span class="kw2">&lt;title&gt;</span></span>Page hosted on example.org<span class="sc2"><span class="kw2">&lt;/title&gt;</span></span>
	<span class="sc2"><span class="kw2">&lt;script</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span><span class="kw2">&gt;</span></span>
	function updateIframeHeight() {
		var iframe = document.getElementById('hiddenIframe');
		var newHeight = parseInt(document.body.offsetHeight,10) + 10;
		iframe.src = 'http://example.com/xssEnabler.html?height=' + newHeight;
	}
	<span class="sc2"><span class="kw2">&lt;/script&gt;</span></span>
<span class="sc2"><span class="kw2">&lt;/head&gt;</span></span>
&nbsp;
<span class="sc2"><span class="kw2">&lt;body</span> <span class="kw3">onload</span><span class="sy0">=</span><span class="st0">&quot;updateIframeHeight()&quot;</span><span class="kw2">&gt;</span></span>
	<span class="sc2"><span class="kw2">&lt;h1&gt;</span></span>This page is hosted on the example.org domain<span class="sc2"><span class="kw2">&lt;/h1&gt;</span></span>
	<span class="sc2"><span class="kw2">&lt;p&gt;</span></span>The iframe below is hosted on the example.com domain (and be styled to be hidden)<span class="sc2"><span class="kw2">&lt;/p&gt;</span></span>
	<span class="sc2"><span class="kw2">&lt;iframe</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;hiddenIframe&quot;</span> <span class="kw3">width</span><span class="sy0">=</span><span class="st0">&quot;100&quot;</span> <span class="kw3">height</span><span class="sy0">=</span><span class="st0">&quot;100&quot;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;http://example.com/xssEnabler.html&quot;</span><span class="kw2">&gt;</span></span>Iframes not supported.<span class="sc2"><span class="kw2">&lt;/iframe&gt;</span></span>
<span class="sc2"><span class="kw2">&lt;/body&gt;</span></span>
<span class="sc2"><span class="kw2">&lt;/html&gt;</span></span></pre></div></div></div>

<p>The final source file resides on the original domain (marked as [3] in the figure above) and contains some javascript to strip out the height parameter and then pass this on to the function on the main page that resizes the iframe. It is referred to in the code above, as the content of the file at http://example.org/xssEnabler.html &#8211; and whilst it is saved as a .html file, it contains just the code you see below.</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="javascript" style="color: #000000;"><span class="sy0">&lt;</span>script type<span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span><span class="sy0">&gt;</span>
	<span class="kw2">function</span> getFirstParamFromLocation<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
		<span class="kw2">var</span> pair <span class="sy0">=</span> window.<span class="me1">location</span>.<span class="me1">search</span>.<span class="me1">substring</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">;</span>
		<span class="kw2">var</span> parts <span class="sy0">=</span> pair.<span class="me1">split</span><span class="br0">&#40;</span><span class="st0">'='</span><span class="br0">&#41;</span><span class="sy0">;</span>
		<span class="kw1">return</span> parts<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy0">;</span>
	<span class="br0">&#125;</span>
	<span class="kw2">var</span> nHeight <span class="sy0">=</span> getFirstParamFromLocation<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
	<span class="kw1">try</span> <span class="br0">&#123;</span>
		window.<span class="me1">top</span>.<span class="me1">resizeIframeHeight</span><span class="br0">&#40;</span>height<span class="br0">&#41;</span><span class="sy0">;</span>
	<span class="br0">&#125;</span> <span class="kw1">catch</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span>
<span class="sy0">&lt;/</span>script<span class="sy0">&gt;</span></pre></div></div></div>

<p>Obviously you would not be using example.com and example.org for your solution, they are used merely to identify the different domains you would use for each file.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codecouch.com/2008/10/cross-site-scripting-xss-using-iframes/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ReferenceError: console is not defined</title>
		<link>http://www.codecouch.com/2008/10/referenceerror-console-is-not-defined/</link>
		<comments>http://www.codecouch.com/2008/10/referenceerror-console-is-not-defined/#comments</comments>
		<pubDate>Mon, 13 Oct 2008 19:50:30 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.codecouch.com/?p=162</guid>
		<description><![CDATA[If you have recently upgraded to the free Firefox extension Firebug 1.2 - then you may have experienced some difficulties with console.log throwing the following: ReferenceError: console is not defined. Read on for an explaination...]]></description>
			<content:encoded><![CDATA[<p>If you have recently changed your Firefox configurations (and upgraded to Firebug 1.2) then you may have experienced some difficulties with console.log throwing the following error:</p>
<blockquote><p>ReferenceError: console is not defined</p></blockquote>
<p>It turns out that this is by design. If you want to make use of the console object that Firebug offers, you need to do so with a call to <strong>window.loadFirebugConsole()</strong> first.</p>
<p>A little bit of testing, and the following code can be safely put in your javascript source to enable use of the Firebug console object safely (without breaking other browsers).</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="javascript" style="color: #000000;"><span class="kw1">if</span> <span class="br0">&#40;</span>window<span class="br0">&#91;</span><span class="st0">'loadFirebugConsole'</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
	window.<span class="me1">loadFirebugConsole</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span>
	<span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span>window<span class="br0">&#91;</span><span class="st0">'console'</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
		window.<span class="me1">console</span> <span class="sy0">=</span> <span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span>
		window.<span class="me1">console</span>.<span class="me1">info</span> <span class="sy0">=</span> <span class="kw3">alert</span><span class="sy0">;</span>
		window.<span class="me1">console</span>.<span class="me1">log</span> <span class="sy0">=</span> <span class="kw3">alert</span><span class="sy0">;</span>
		window.<span class="me1">console</span>.<span class="me1">warn</span> <span class="sy0">=</span> <span class="kw3">alert</span><span class="sy0">;</span>
		window.<span class="me1">console</span>.<span class="me1">error</span> <span class="sy0">=</span> <span class="kw3">alert</span><span class="sy0">;</span>
	<span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div></div>

<p>Whilst you are at it, why not check out some of the other nifty commands available on the Firebug console object at the <a href="http://getfirebug.com/console.html">Get Firebug</a> website.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codecouch.com/2008/10/referenceerror-console-is-not-defined/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using AJAX to update the time on a web page from the server</title>
		<link>http://www.codecouch.com/2008/10/using-ajax-to-update-the-time-on-a-web-page/</link>
		<comments>http://www.codecouch.com/2008/10/using-ajax-to-update-the-time-on-a-web-page/#comments</comments>
		<pubDate>Sun, 12 Oct 2008 11:25:19 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.codecouch.com/?p=130</guid>
		<description><![CDATA[In an attempt to better explain how you can use AJAX to fetch some data from the server and display it on the web page, I have provided a self contained PHP file.]]></description>
			<content:encoded><![CDATA[<p>Sometimes the easiest way to begin to understand something is through an example. In an attempt to better explain how you can use AJAX to fetch some data from the server and then display it on a web page (without refreshing the page), I constructed the following example PHP page:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="php" style="color: #000000;"><span class="kw2">&lt;?</span>
<span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">isset</span><span class="br0">&#40;</span><span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st0">'xhttp'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
	<span class="re0">$counter</span> <span class="sy0">=</span> <span class="kw3">date</span><span class="br0">&#40;</span><span class="st0">&quot;d M Y h:m:s&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
	<span class="kw3">echo</span> <span class="re0">$counter</span><span class="sy0">;</span>
<span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span>
<span class="kw2">?&gt;</span>
<span class="sy0">&lt;</span>html<span class="sy0">&gt;</span>
<span class="sy0">&lt;</span>head<span class="sy0">&gt;</span>
<span class="sy0">&lt;</span>title<span class="sy0">&gt;</span>Test some XHTTP<span class="sy0">&lt;/</span>title<span class="sy0">&gt;</span>
<span class="sy0">&lt;</span>script type<span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span><span class="sy0">&gt;</span>
<span class="kw2">function</span> getHTTPObject<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
	<span class="kw2">var</span> xmlhttp<span class="sy0">;</span>
	<span class="coMULTI">/*@cc_on
	@if (@_jscript_version &gt;= 5)
		try {
			xmlhttp = new ActiveXObject(&quot;Msxml2.XMLHTTP&quot;);
		} catch (e) {
			try {
				xmlhttp = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);
			} catch (E) {
				xmlhttp = false;
			}
		}
	@else
		xmlhttp = false;
	@end @*/</span>
	<span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span>xmlhttp <span class="sy0">&amp;&amp;</span> typeof XMLHttpRequest <span class="sy0">!=</span> <span class="st0">'undefined'</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
		try <span class="br0">&#123;</span>
			xmlhttp <span class="sy0">=</span> <span class="kw2">new</span> XMLHttpRequest<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
		<span class="br0">&#125;</span> catch <span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span>
			xmlhttp <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">;</span>
		<span class="br0">&#125;</span>
	<span class="br0">&#125;</span>
	<span class="kw1">return</span> xmlhttp<span class="sy0">;</span>
<span class="br0">&#125;</span><span class="sy0">;</span>
&nbsp;
<span class="kw2">function</span> fetchData<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
	http <span class="sy0">=</span> getHTTPObject<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
	http<span class="sy0">.</span>open<span class="br0">&#40;</span><span class="st0">'get'</span><span class="sy0">,</span> <span class="st0">&quot;&lt;?= $_SERVER['SCRIPT_NAME']; ?&gt;?xhttp=true&quot;</span><span class="sy0">,</span> <span class="kw2">true</span><span class="br0">&#41;</span><span class="sy0">;</span>
	http<span class="sy0">.</span>onreadystatechange <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
		<span class="kw1">if</span> <span class="br0">&#40;</span>http <span class="sy0">!=</span> <span class="kw2">null</span> <span class="sy0">&amp;&amp;</span> http<span class="sy0">.</span>readyState <span class="sy0">==</span> <span class="nu0">4</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
			document<span class="sy0">.</span>getElementById<span class="br0">&#40;</span><span class="st0">'displayCounter'</span><span class="br0">&#41;</span><span class="sy0">.</span>innerHTML <span class="sy0">=</span> http<span class="sy0">.</span>responseText<span class="sy0">;</span>
		<span class="br0">&#125;</span>
	<span class="br0">&#125;</span><span class="sy0">;</span>
	http<span class="sy0">.</span>send<span class="br0">&#40;</span><span class="kw2">null</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span><span class="sy0">;</span>
&nbsp;
<span class="kw2">function</span> initPage<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
	http <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">;</span>
	pageTimerHandle <span class="sy0">=</span> setInterval<span class="br0">&#40;</span><span class="st0">'fetchData()'</span><span class="sy0">,</span> <span class="nu0">2000</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span><span class="sy0">;</span>
&nbsp;
window<span class="sy0">.</span>onload <span class="sy0">=</span> initPage<span class="sy0">;</span>
<span class="kw2">&lt;/script&gt;</span>
<span class="sy0">&lt;/</span>head<span class="sy0">&gt;</span>
<span class="sy0">&lt;</span>body<span class="sy0">&gt;</span>
	<span class="sy0">&lt;</span>h1<span class="sy0">&gt;</span>Test page<span class="sy0">&lt;/</span>h1<span class="sy0">&gt;</span>
	<span class="sy0">&lt;</span>p<span class="sy0">&gt;</span>This page is using AJAX to update the <span class="kw3">current</span> <span class="kw3">time</span> every two seconds<span class="sy0">.&lt;/</span>p<span class="sy0">&gt;</span>
	<span class="sy0">&lt;</span>div id<span class="sy0">=</span><span class="st0">&quot;displayCounter&quot;</span><span class="sy0">&gt;&lt;</span>?<span class="sy0">=</span> <span class="kw3">date</span><span class="br0">&#40;</span><span class="st0">&quot;d M Y h:m:s&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span> ?<span class="sy0">&gt;&lt;/</span>div<span class="sy0">&gt;</span>
<span class="sy0">&lt;/</span>body<span class="sy0">&gt;</span>
<span class="sy0">&lt;/</span>html<span class="sy0">&gt;</span>
<span class="kw2">&lt;?</span> <span class="br0">&#125;</span> <span class="kw2">?&gt;</span></pre></div></div></div>

<p>This block of code is PHP and basically tests to see whether a (GET) parameter (called xhttp) was passed in to the URL:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="php" style="color: #000000;"><span class="kw2">&lt;?</span>
<span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">isset</span><span class="br0">&#40;</span><span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st0">'xhttp'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
	<span class="re0">$counter</span> <span class="sy0">=</span> <span class="kw3">date</span><span class="br0">&#40;</span><span class="st0">&quot;d M Y h:m:s&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
	<span class="kw3">echo</span> <span class="re0">$counter</span><span class="sy0">;</span>
<span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span>
<span class="kw2">?&gt;</span></pre></div></div></div>

<p>If the xhttp GET parameter was present in the URL, then the server time is sent back, otherwise the whole HTML page is delivered. This allows us to deliver two very different &#8220;pages&#8221; of data back to the browser using the same single PHP file.</p>
<p>The following block of code is used to output the full name of the PHP page being run (the file name) and merely removes the need to specify the file name in the code itself:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="php" style="color: #000000;"><span class="kw2">&lt;?</span><span class="sy0">=</span> <span class="re0">$_SERVER</span><span class="br0">&#91;</span><span class="st0">'SCRIPT_NAME'</span><span class="br0">&#93;</span><span class="sy0">;</span> <span class="kw2">?&gt;</span></pre></div></div></div>

<p>The final block of PHP that is prominent in the page is:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="php" style="color: #000000;"><span class="kw2">&lt;?</span><span class="sy0">=</span> <span class="kw3">date</span><span class="br0">&#40;</span><span class="st0">&quot;d M Y h:m:s&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="kw2">?&gt;</span></pre></div></div></div>

<p>This writes out the current date and time to the page (and mimics the same date and time format that will be returned if the PHP file is requested with the GET parameter of xhttp added to it).</p>
<p>Everything else is just HTML and Javascript.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codecouch.com/2008/10/using-ajax-to-update-the-time-on-a-web-page/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to prevent page reloading with a non-submitted form</title>
		<link>http://www.codecouch.com/2007/08/how-to-prevent-page-reloading-with-a-non-submitted-form/</link>
		<comments>http://www.codecouch.com/2007/08/how-to-prevent-page-reloading-with-a-non-submitted-form/#comments</comments>
		<pubDate>Tue, 07 Aug 2007 11:12:03 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Forms]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.codecouch.com/?p=126</guid>
		<description><![CDATA[This technique informs the user if they navigate away without submitting the form on the page (whilst letting them change their mind and remain on the page). Useful to prevent the loss of unsaved changes on a web form.]]></description>
			<content:encoded><![CDATA[<p>The following example page shows how you can test whether a form has been changed, and inform the user if they navigate away from the page without submitting the form (whilst letting them change their mind and remain on the page).</p>
<p>This technique is suitable for IE6, IE7 and Firefox and relies on the <b>onbeforeunload</b> event to allow the user to change their minds and remain on the page (therefore allowing them to submit the form and not lose data).</p>
<p>Note the <b>onsubmit</b> event being added to the form during the initialisation process &#8211; this is to disable the <span style="font-weight: bold;">onbeforeunload</span> event from running the preUnload() method when the form is actually submitted.</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="html4strict" style="color: #000000;"><span class="sc2"><span class="kw2">&lt;html&gt;</span></span>
<span class="sc2"><span class="kw2">&lt;head&gt;</span></span>
<span class="sc2"><span class="kw2">&lt;title&gt;</span></span>Prevent accidental page reload<span class="sc2"><span class="kw2">&lt;/title&gt;</span></span>
<span class="sc2"><span class="kw2">&lt;script</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span><span class="kw2">&gt;</span></span>
/* check to see if form field values have changed */
function checkForFormChanges()
{
  var l_oForm = document.getElementById('mainForm');
  var l_pInputs = l_oForm.getElementsByTagName('INPUT');
  for (var loop=0, max=l_pInputs.length; loop<span class="sc2">&lt;max; loop++<span class="br0">&#41;</span>
  <span class="br0">&#123;</span>
    if <span class="br0">&#40;</span>l_pInputs<span class="br0">&#91;</span>loop<span class="br0">&#93;</span>.defaultValue !<span class="sy0">=</span> l_pInputs<span class="br0">&#91;</span>loop<span class="br0">&#93;</span>.<span class="kw3">value</span><span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
      g_bPreventUnload <span class="sy0">=</span> true;
      break;
    <span class="br0">&#125;</span>
  <span class="br0">&#125;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="sy0">/</span>* <span class="kw3">method</span> to run as the page is about to unload *<span class="sy0">/</span>
function preUnload<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
  checkForFormChanges<span class="br0">&#40;</span><span class="br0">&#41;</span>;
  if <span class="br0">&#40;</span>g_bPreventUnload<span class="br0">&#41;</span>
  <span class="br0">&#123;</span>
    var l_sMessage <span class="sy0">=</span> <span class="st0">&quot;You made changes to the form. &quot;</span>;
    l_sMessage +<span class="sy0">=</span> <span class="st0">&quot;If you continue, they will be lost.&quot;</span>;
    try
    <span class="br0">&#123;</span>
      window.event.returnValue <span class="sy0">=</span> l_sMessage;
    <span class="br0">&#125;</span>
    catch<span class="br0">&#40;</span>e<span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
      <span class="sy0">//</span> swallow firefox error
    <span class="br0">&#125;</span>
    return l_sMessage;
  <span class="br0">&#125;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="sy0">/</span>* <span class="kw3">clear</span> onbeforeunload event when the form is sent *<span class="sy0">/</span>
function clearUnload<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
  if <span class="br0">&#40;</span>window.detachEvent<span class="br0">&#41;</span>
  <span class="br0">&#123;</span>
    window.detachEvent<span class="br0">&#40;</span><span class="st0">&quot;onbeforeunload&quot;</span>, preUnload<span class="br0">&#41;</span>;
  <span class="br0">&#125;</span>
  else
  <span class="br0">&#123;</span>
    window.onbeforeunload <span class="sy0">=</span> null;    
  <span class="br0">&#125;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="sy0">/</span>* initialise the page, attaching the DOM events *<span class="sy0">/</span>
function init<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
  window<span class="br0">&#91;</span><span class="st0">'g_bPreventUnload'</span><span class="br0">&#93;</span> <span class="sy0">=</span> false;
  if <span class="br0">&#40;</span>window.attachEvent<span class="br0">&#41;</span>
  <span class="br0">&#123;</span>
    window.attachEvent<span class="br0">&#40;</span><span class="st0">&quot;onbeforeunload&quot;</span>, preUnload<span class="br0">&#41;</span>;
  <span class="br0">&#125;</span>
  else
  <span class="br0">&#123;</span>
    window.onbeforeunload <span class="sy0">=</span> preUnload;
  <span class="br0">&#125;</span>
  document.getElementById<span class="br0">&#40;</span><span class="st0">'mainForm'</span><span class="br0">&#41;</span>.<span class="kw3">onsubmit</span> <span class="sy0">=</span> clearUnload;
<span class="br0">&#125;</span>
&nbsp;
window.<span class="kw3">onload</span> <span class="sy0">=</span> init;
<span class="kw2">&lt;/script&gt;</span></span>
<span class="sc2"><span class="kw2">&lt;/head&gt;</span></span>
<span class="sc2"><span class="kw2">&lt;body&gt;</span></span>
<span class="sc2"><span class="kw2">&lt;form</span> <span class="kw3">action</span><span class="sy0">=</span><span class="st0">&quot;&quot;</span> <span class="kw3">method</span><span class="sy0">=</span><span class="st0">&quot;get&quot;</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;mainForm&quot;</span><span class="kw2">&gt;</span></span>
  <span class="sc2"><span class="kw2">&lt;fieldset&gt;</span></span>
    <span class="sc2"><span class="kw2">&lt;input</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text&quot;</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;reason&quot;</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;initial&quot;</span><span class="sy0">/</span><span class="kw2">&gt;</span></span>
    <span class="sc2"><span class="kw2">&lt;input</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;submit&quot;</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;submit&quot;</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;Send Form&quot;</span><span class="sy0">/</span><span class="kw2">&gt;</span></span>
  <span class="sc2"><span class="kw2">&lt;/fieldset&gt;</span></span>
<span class="sc2"><span class="kw2">&lt;/form&gt;</span></span>
<span class="sc2"><span class="kw2">&lt;/body&gt;</span></span>
<span class="sc2"><span class="kw2">&lt;/html&gt;</span></span></pre></div></div></div>

<p>If the contents of the form field in the example above is changed and the page is reloaded (or the user tries to visit another URL), a message will show that allows the user to cancel the page being reloaded etc. This will not happen if the form field contents are not changed (nor when the form is submitted).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codecouch.com/2007/08/how-to-prevent-page-reloading-with-a-non-submitted-form/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tips on converting strings into numbers</title>
		<link>http://www.codecouch.com/2007/08/tips-on-converting-strings-into-numbers/</link>
		<comments>http://www.codecouch.com/2007/08/tips-on-converting-strings-into-numbers/#comments</comments>
		<pubDate>Mon, 06 Aug 2007 09:26:41 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.codecouch.com/?p=96</guid>
		<description><![CDATA[I recently ran into some strange behaviour using parseInt() to convert a string into an integer. It turns out that passing in the base (radix) of the number that the string prepresents is important to ensure the desired behaviour.]]></description>
			<content:encoded><![CDATA[<p>When you are reading a value from a text input, the value is returned as a string. This is not really a problem for Javascript in that it’s loosely typed and converting the string into a number is really straightforward.</p>
<p>As with most things, there are several ways to do this conversion. I’ve used parseInt() a lot in the past to convert a string into a number (although strictly speaking I am converting to an Integer rather than just a Number when using parseInt()), but recently ran into some strange behaviour that I wanted to understand.</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="javascript" style="color: #000000;"><span class="kw2">var</span> l_sValue <span class="sy0">=</span> <span class="st0">&quot;07&quot;</span><span class="sy0">;</span>
<span class="kw3">alert</span><span class="br0">&#40;</span>parseInt<span class="br0">&#40;</span>l_sValue<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// alerts 7</span></pre></div></div></div>

<p>This seems to work fine, the string represents the number 7, and the parseInt() correctly parses it into the integer 7. Now we change the string value and something strange occurs:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="javascript" style="color: #000000;"><span class="kw2">var</span> l_sValue <span class="sy0">=</span> <span class="st0">&quot;08&quot;</span><span class="sy0">;</span>
<span class="kw3">alert</span><span class="br0">&#40;</span>parseInt<span class="br0">&#40;</span>l_sValue<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// alerts 0</span></pre></div></div></div>

<p>This is obviously not the expected result! The solution is to use parseInt() correctly, and pass through both parameters (the second parameter is the number base to use).</p>
<p>If you do not pass in the second parameter (the base, or radix) then Javascript will default to base 10, unless:</p>
<ul>
<li>the string starts with ‘0′, then it will default to base 8 (octal)</li>
<li>the string starts with ‘0x’, then it will default to base 16 (hexadecimal)</li>
</ul>
<p>Because the string we used above started with ‘0′, Javascript defaulted to use base 8. The reason we see 0 being returned from parseInt(’08′) is because 8 is not a valid number in octal (we would count in octal 0, 1, 2, … 6, 7, 10, 11, 12, … 17, 20, 21, …).</p>
<p>Now look what happens when we pass in the second parameter and use (the more familiar) base 10:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="javascript" style="color: #000000;"><span class="kw2">var</span> l_sValue <span class="sy0">=</span> <span class="st0">&quot;08&quot;</span><span class="sy0">;</span>
<span class="kw3">alert</span><span class="br0">&#40;</span>parseInt<span class="br0">&#40;</span>l_sValue<span class="sy0">,</span> <span class="nu0">10</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// alerts 8</span></pre></div></div></div>

<p><strong>Lesson for the day:</strong> always pass in the base when using parseInt() to parse a string into an integer.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codecouch.com/2007/08/tips-on-converting-strings-into-numbers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creating a coloured gradient background without images</title>
		<link>http://www.codecouch.com/2006/05/creating-a-coloured-gradient-background-without-images/</link>
		<comments>http://www.codecouch.com/2006/05/creating-a-coloured-gradient-background-without-images/#comments</comments>
		<pubDate>Wed, 03 May 2006 10:33:23 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[Graphical]]></category>
		<category><![CDATA[Demos]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.codecouch.com/?p=97</guid>
		<description><![CDATA[If you want to dynamically create a gradient background without using images, this code does the job and is flexible for most needs.]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s some code to dynamically create a gradient background without using images. The width and/or height of each colour band, as well as the total number of colour bands can be easily changed.</p>
<p>You can use &#8220;createGradientV&#8221; to create a vertical gradient (North to South), or &#8220;createGradientH&#8221; to create a horizontal gradient (West to East). Each of the functions takes one or more sets of 4 parameters, documented in the code.</p>
<p>To add more colour bands, simply add more sets of parameters  to the relevant &#8220;createGradient&#8221; method calls.</p>
<p>This code has been tested working on IE/Win 6, NN/Win 7, Opera/Win 7, FF/Win, FF/Mac, and Safari/Mac. It does NOT work on IE/Mac (tested on version 5.22).</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="javascript" style="color: #000000;"><span class="sy0">&lt;!</span>DOCTYPE html <span class="kw2">PUBLIC</span> <span class="st0">&quot;-//W3C//DTD XHTML 1.1 Strict//EN&quot;</span> <span class="st0">&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;</span><span class="sy0">&gt;</span>
<span class="sy0">&lt;</span>html xmlns<span class="sy0">=</span><span class="st0">&quot;http://www.w3.org/1999/xhtml&quot;</span> lang<span class="sy0">=</span><span class="st0">&quot;en&quot;</span> xml<span class="sy0">:</span>lang<span class="sy0">=</span><span class="st0">&quot;en&quot;</span><span class="sy0">&gt;</span>
<span class="sy0">&lt;</span>head<span class="sy0">&gt;</span>
    <span class="sy0">&lt;</span>meta http<span class="sy0">-</span>equiv<span class="sy0">=</span><span class="st0">&quot;content-type&quot;</span> content<span class="sy0">=</span><span class="st0">&quot;text/html; charset=iso-8859-1&quot;</span> <span class="sy0">/&gt;</span>
    <span class="sy0">&lt;</span>meta http<span class="sy0">-</span>equiv<span class="sy0">=</span><span class="st0">&quot;content-language&quot;</span> content<span class="sy0">=</span><span class="st0">&quot;en&quot;</span> <span class="sy0">/&gt;</span>
    <span class="sy0">&lt;</span>title<span class="sy0">&gt;</span>Gradient Background<span class="sy0">&lt;/</span>title<span class="sy0">&gt;</span>
&nbsp;
    <span class="sy0">&lt;</span>style type<span class="sy0">=</span><span class="st0">&quot;text/css&quot;</span><span class="sy0">&gt;</span>
        body <span class="br0">&#123;</span>
            padding<span class="sy0">:</span> 0px<span class="sy0">;</span>
            margin<span class="sy0">:</span> 20px<span class="sy0">;</span>
            background<span class="sy0">-</span>color<span class="sy0">:</span> #00CCFF<span class="sy0">;</span>
        <span class="br0">&#125;</span>
&nbsp;
        #fadeBandsV <span class="br0">&#123;</span>
            position<span class="sy0">:</span> absolute<span class="sy0">;</span>
            left<span class="sy0">:</span> 0px<span class="sy0">;</span>
            top<span class="sy0">:</span> 0px<span class="sy0">;</span>
            width<span class="sy0">:</span> <span class="nu0">100</span><span class="sy0">%;</span>
            height<span class="sy0">:</span> 80px<span class="sy0">;</span>
            z<span class="sy0">-</span>index<span class="sy0">:</span> <span class="nu0">1</span><span class="sy0">;</span>
        <span class="br0">&#125;</span>
&nbsp;
        #fadeBandsH <span class="br0">&#123;</span>
            position<span class="sy0">:</span> absolute<span class="sy0">;</span>
            left<span class="sy0">:</span> 0px<span class="sy0">;</span>
            top<span class="sy0">:</span> 0px<span class="sy0">;</span>
            width<span class="sy0">:</span> <span class="nu0">100</span><span class="sy0">%;</span>
            z<span class="sy0">-</span>index<span class="sy0">:</span> <span class="nu0">1</span><span class="sy0">;</span>
        <span class="br0">&#125;</span>
&nbsp;
        #fadeBandsV div <span class="br0">&#123;</span>
            overflow<span class="sy0">:</span> hidden<span class="sy0">;</span>
            position<span class="sy0">:</span> absolute<span class="sy0">;</span>
            width<span class="sy0">:</span> <span class="nu0">100</span><span class="sy0">%;</span>
        <span class="br0">&#125;</span>
&nbsp;
        #fadeBandsH div <span class="br0">&#123;</span>
            overflow<span class="sy0">:</span> hidden<span class="sy0">;</span>
            position<span class="sy0">:</span> absolute<span class="sy0">;</span>
            height<span class="sy0">:</span> 200px<span class="sy0">;</span>
        <span class="br0">&#125;</span>
&nbsp;
        #pageContent <span class="br0">&#123;</span>
            position<span class="sy0">:</span> relative<span class="sy0">;</span>
            z<span class="sy0">-</span>index<span class="sy0">:</span> <span class="nu0">2</span><span class="sy0">;</span>
        <span class="br0">&#125;</span>
    <span class="sy0">&lt;/</span>style<span class="sy0">&gt;</span>
&nbsp;
    <span class="sy0">&lt;</span>script type<span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span><span class="sy0">&gt;</span>
    <span class="sy0">&lt;!--</span>
&nbsp;
        <span class="co1">// do not call this function directly - use createGradientV or createGradientH instead</span>
        <span class="kw2">function</span> createGradient<span class="br0">&#40;</span>direction<span class="sy0">,</span> args<span class="br0">&#41;</span> <span class="br0">&#123;</span>
            <span class="kw2">var</span> bandSets <span class="sy0">=</span> args.<span class="me1">length</span> <span class="sy0">/</span> <span class="nu0">4</span><span class="sy0">;</span>
            <span class="kw2">var</span> startPos <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
&nbsp;
            <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> bandSetLoop<span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span> bandSetLoop<span class="sy0">&lt;</span>bandSets<span class="sy0">;</span> bandSetLoop<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
                fadeFromColour <span class="sy0">=</span> args<span class="br0">&#91;</span>bandSetLoop <span class="sy0">*</span> <span class="nu0">4</span><span class="br0">&#93;</span><span class="sy0">;</span>
                fadeToColour <span class="sy0">=</span> args<span class="br0">&#91;</span>bandSetLoop <span class="sy0">*</span> <span class="nu0">4</span> <span class="sy0">+</span> <span class="nu0">1</span><span class="br0">&#93;</span><span class="sy0">;</span>
                bandSize <span class="sy0">=</span> args<span class="br0">&#91;</span>bandSetLoop <span class="sy0">*</span> <span class="nu0">4</span> <span class="sy0">+</span> <span class="nu0">2</span><span class="br0">&#93;</span><span class="sy0">;</span>
                fadeSteps <span class="sy0">=</span> args<span class="br0">&#91;</span>bandSetLoop <span class="sy0">*</span> <span class="nu0">4</span> <span class="sy0">+</span> <span class="nu0">3</span><span class="br0">&#93;</span><span class="sy0">;</span>
&nbsp;
                <span class="co1">// calculate stepped colour values for each band</span>
                <span class="kw2">var</span> colourSteps <span class="sy0">=</span> <span class="br0">&#91;</span>fadeFromColour.<span class="me1">concat</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><span class="sy0">;</span>                <span class="co1">// ensure first colour is the start colour</span>
                <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> bandLoop<span class="sy0">=</span><span class="nu0">1</span><span class="sy0">;</span> bandLoop<span class="sy0">&lt;</span>fadeSteps<span class="sy0">;</span> bandLoop<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
                    colourSteps<span class="br0">&#91;</span>bandLoop<span class="br0">&#93;</span> <span class="sy0">=</span> <span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">;</span>
                    <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> rgbLoop<span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span> rgbLoop<span class="sy0">&lt;</span><span class="nu0">3</span><span class="sy0">;</span> rgbLoop<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
                        colourSteps<span class="br0">&#91;</span>bandLoop<span class="br0">&#93;</span><span class="br0">&#91;</span>rgbLoop<span class="br0">&#93;</span> <span class="sy0">=</span> Math.<span class="me1">round</span><span class="br0">&#40;</span>colourSteps<span class="br0">&#91;</span>bandLoop<span class="nu0">-1</span><span class="br0">&#93;</span><span class="br0">&#91;</span>rgbLoop<span class="br0">&#93;</span> <span class="sy0">+</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>fadeToColour<span class="br0">&#91;</span>rgbLoop<span class="br0">&#93;</span> <span class="sy0">-</span> colourSteps<span class="br0">&#91;</span>bandLoop<span class="nu0">-1</span><span class="br0">&#93;</span><span class="br0">&#91;</span>rgbLoop<span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="sy0">/</span> <span class="br0">&#40;</span>fadeSteps <span class="sy0">-</span> bandLoop<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
                    <span class="br0">&#125;</span>
                <span class="br0">&#125;</span>
&nbsp;
                <span class="co1">// now draw each band</span>
                <span class="kw1">if</span> <span class="br0">&#40;</span>direction <span class="sy0">==</span> <span class="st0">'V'</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
                    <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> bandLoop<span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span> bandLoop<span class="sy0">&lt;</span>fadeSteps<span class="sy0">;</span> bandLoop<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
                        document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">'fadeBandsV'</span><span class="br0">&#41;</span>.<span class="me1">appendChild</span><span class="br0">&#40;</span>aDiv <span class="sy0">=</span> document.<span class="me1">createElement</span><span class="br0">&#40;</span><span class="st0">'div'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
                        aDiv.<span class="me1">style</span>.<span class="me1">height</span> <span class="sy0">=</span> bandSize <span class="sy0">+</span> <span class="st0">'px'</span><span class="sy0">;</span>
                        aDiv.<span class="me1">style</span>.<span class="me1">top</span> <span class="sy0">=</span> startPos <span class="sy0">+</span> <span class="br0">&#40;</span>bandSize <span class="sy0">*</span> bandLoop<span class="br0">&#41;</span> <span class="sy0">+</span> <span class="st0">'px'</span><span class="sy0">;</span>
                        aDiv.<span class="me1">style</span>.<span class="me1">backgroundColor</span> <span class="sy0">=</span> <span class="st0">'rgb('</span> <span class="sy0">+</span> colourSteps<span class="br0">&#91;</span>bandLoop<span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> <span class="sy0">+</span> <span class="st0">','</span> <span class="sy0">+</span> colourSteps<span class="br0">&#91;</span>bandLoop<span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> <span class="sy0">+</span> <span class="st0">','</span> <span class="sy0">+</span> colourSteps<span class="br0">&#91;</span>bandLoop<span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span> <span class="sy0">+</span> <span class="st0">')'</span><span class="sy0">;</span>
                    <span class="br0">&#125;</span>
                <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span>
                    <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> bandLoop<span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span> bandLoop<span class="sy0">&lt;</span>fadeSteps<span class="sy0">;</span> bandLoop<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
                        document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">'fadeBandsH'</span><span class="br0">&#41;</span>.<span class="me1">appendChild</span><span class="br0">&#40;</span>aDiv <span class="sy0">=</span> document.<span class="me1">createElement</span><span class="br0">&#40;</span><span class="st0">'div'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
                        aDiv.<span class="me1">style</span>.<span class="me1">width</span> <span class="sy0">=</span> bandSize <span class="sy0">+</span> <span class="st0">'px'</span><span class="sy0">;</span>
                        aDiv.<span class="me1">style</span>.<span class="me1">left</span> <span class="sy0">=</span> startPos <span class="sy0">+</span> <span class="br0">&#40;</span>bandSize <span class="sy0">*</span> bandLoop<span class="br0">&#41;</span> <span class="sy0">+</span> <span class="st0">'px'</span><span class="sy0">;</span>
                        aDiv.<span class="me1">style</span>.<span class="me1">backgroundColor</span> <span class="sy0">=</span> <span class="st0">'rgb('</span> <span class="sy0">+</span> colourSteps<span class="br0">&#91;</span>bandLoop<span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> <span class="sy0">+</span> <span class="st0">','</span> <span class="sy0">+</span> colourSteps<span class="br0">&#91;</span>bandLoop<span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> <span class="sy0">+</span> <span class="st0">','</span> <span class="sy0">+</span> colourSteps<span class="br0">&#91;</span>bandLoop<span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span> <span class="sy0">+</span> <span class="st0">')'</span><span class="sy0">;</span>
                    <span class="br0">&#125;</span>
                <span class="br0">&#125;</span>
                startPos <span class="sy0">+=</span> fadeSteps <span class="sy0">*</span> bandSize<span class="sy0">;</span>
            <span class="br0">&#125;</span>
        <span class="br0">&#125;</span>
&nbsp;
        <span class="co1">// createGradientV - creates a vertical gradient (North to South)</span>
        <span class="co1">// Parameters: createGradientV takes a single set, or multiple sets of, 4 arguments:</span>
        <span class="co1">//         argument 1: fadeFromColour = an array of R,G,B colours to fade from (for example, [0, 0, 255] == #0000FF)</span>
        <span class="co1">//         argument 2: fadeToColour = an array of R,G,B colours to fade to (for example, [0, 204, 255] == #00CCFF)</span>
        <span class="co1">//         argument 3: bandHeight = height of each colour band</span>
        <span class="co1">//         argument 4: fadeSteps = number of colour bands used for the gradient (should be at least 2)</span>
        <span class="kw2">function</span> createGradientV<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
            <span class="kw1">if</span> <span class="br0">&#40;</span>arguments.<span class="me1">length</span> <span class="sy0">&lt;</span> <span class="nu0">1</span> <span class="sy0">||</span> arguments.<span class="me1">length</span> <span class="sy0">%</span> <span class="nu0">4</span> <span class="sy0">!=</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
                <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">'Incorrect usage. Number of parameters must be a multiple of 4!'</span><span class="br0">&#41;</span><span class="sy0">;</span>
                <span class="kw1">return</span><span class="sy0">;</span>
            <span class="br0">&#125;</span>
            createGradient<span class="br0">&#40;</span><span class="st0">'V'</span><span class="sy0">,</span> arguments<span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span>
&nbsp;
        <span class="co1">// createGradientH - creates a horizontal gradient (West to East)</span>
        <span class="co1">// Parameters: createGradientH takes a single set, or multiple sets of, 4 arguments:</span>
        <span class="co1">//         argument 1: fadeFromColour = an array of R,G,B colours to fade from (for example, [0, 0, 255] == #0000FF)</span>
        <span class="co1">//         argument 2: fadeToColour = an array of R,G,B colours to fade to (for example, [0, 204, 255] == #00CCFF)</span>
        <span class="co1">//         argument 3: bandHeight = height of each colour band</span>
        <span class="co1">//         argument 4: fadeSteps = number of colour bands used for the gradient (should be at least 2)</span>
        <span class="kw2">function</span> createGradientH<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
            <span class="kw1">if</span> <span class="br0">&#40;</span>arguments.<span class="me1">length</span> <span class="sy0">&lt;</span> <span class="nu0">1</span> <span class="sy0">||</span> arguments.<span class="me1">length</span> <span class="sy0">%</span> <span class="nu0">4</span> <span class="sy0">!=</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
                <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">'Incorrect usage. Number of parameters must be a multiple of 4!'</span><span class="br0">&#41;</span><span class="sy0">;</span>
                <span class="kw1">return</span><span class="sy0">;</span>
            <span class="br0">&#125;</span>
            createGradient<span class="br0">&#40;</span><span class="st0">'H'</span><span class="sy0">,</span> arguments<span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span>
&nbsp;
        <span class="kw2">function</span> drawGradient<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
            createGradientV<span class="br0">&#40;</span><span class="br0">&#91;</span><span class="nu0">255</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="br0">&#91;</span><span class="nu0">255</span><span class="sy0">,</span> <span class="nu0">255</span><span class="sy0">,</span> <span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="nu0">3</span><span class="sy0">,</span> <span class="nu0">50</span><span class="sy0">,</span> <span class="br0">&#91;</span><span class="nu0">255</span><span class="sy0">,</span> <span class="nu0">255</span><span class="sy0">,</span> <span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="br0">&#91;</span><span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">255</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="nu0">3</span><span class="sy0">,</span> <span class="nu0">50</span><span class="sy0">,</span> <span class="br0">&#91;</span><span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">255</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="br0">&#91;</span><span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">204</span><span class="sy0">,</span> <span class="nu0">255</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="nu0">3</span><span class="sy0">,</span> <span class="nu0">50</span><span class="br0">&#41;</span><span class="sy0">;</span>
            createGradientH<span class="br0">&#40;</span><span class="br0">&#91;</span><span class="nu0">255</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="br0">&#91;</span><span class="nu0">255</span><span class="sy0">,</span> <span class="nu0">255</span><span class="sy0">,</span> <span class="nu0">255</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="nu0">3</span><span class="sy0">,</span> <span class="nu0">50</span><span class="sy0">,</span> <span class="br0">&#91;</span><span class="nu0">255</span><span class="sy0">,</span> <span class="nu0">255</span><span class="sy0">,</span> <span class="nu0">255</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="br0">&#91;</span><span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">255</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="nu0">3</span><span class="sy0">,</span> <span class="nu0">50</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span>
&nbsp;
    <span class="co1">//--&gt;</span>
    <span class="sy0">&lt;/</span>script<span class="sy0">&gt;</span>
<span class="sy0">&lt;/</span>head<span class="sy0">&gt;</span>
&nbsp;
<span class="sy0">&lt;</span>body <span class="kw3">onload</span><span class="sy0">=</span><span class="st0">&quot;drawGradient();&quot;</span><span class="sy0">&gt;</span>
    <span class="sy0">&lt;</span>div id<span class="sy0">=</span><span class="st0">&quot;fadeBandsV&quot;</span><span class="sy0">&gt;&lt;/</span>div<span class="sy0">&gt;</span>
    <span class="sy0">&lt;</span>div id<span class="sy0">=</span><span class="st0">&quot;fadeBandsH&quot;</span><span class="sy0">&gt;&lt;/</span>div<span class="sy0">&gt;</span>
    <span class="sy0">&lt;</span>div id<span class="sy0">=</span><span class="st0">&quot;pageContent&quot;</span><span class="sy0">&gt;</span>
        <span class="sy0">&lt;</span>h1<span class="sy0">&gt;</span>A test heading<span class="sy0">&lt;/</span>h1<span class="sy0">&gt;</span>
        <span class="sy0">&lt;</span>p<span class="sy0">&gt;</span>Lorem ipsum dolor sit amet<span class="sy0">,</span> consectetuer adipiscing elit. <span class="me1">Cras</span> lorem. <span class="me1">Proin</span> laoreet fringilla sem. <span class="me1">Pellentesque</span> malesuada<span class="sy0">,</span> urna tristique ornare feugiat<span class="sy0">,</span> turpis wisi ultrices nisl<span class="sy0">,</span> ac vulputate dolor justo non sapien. <span class="me1">Sed</span> fermentum velit. <span class="me1">Cum</span> sociis natoque penatibus et magnis dis parturient montes<span class="sy0">,</span> nascetur ridiculus mus. <span class="me1">Etiam</span> at nulla. <span class="me1">Maecenas</span> tortor nulla<span class="sy0">,</span> adipiscing eget<span class="sy0">,</span> auctor sed<span class="sy0">,</span> cursus id<span class="sy0">,</span> quam. <span class="me1">Suspendisse</span> at sem nonummy orci lobortis ultrices. <span class="me1">Proin</span> odio est<span class="sy0">,</span> dictum id<span class="sy0">,</span> dictum nec<span class="sy0">,</span> ullamcorper sit amet<span class="sy0">,</span> sem. <span class="me1">Proin</span> ullamcorper lacus vitae risus. <span class="me1">Nulla</span> feugiat posuere erat. <span class="kw1">In</span> nec est ac eros lacinia congue. <span class="me1">Suspendisse</span> potenti. <span class="kw1">In</span> a ipsum rhoncus ipsum volutpat consectetuer.<span class="sy0">&lt;/</span>p<span class="sy0">&gt;</span>
        <span class="sy0">&lt;</span>p<span class="sy0">&gt;</span>Lorem ipsum dolor sit amet<span class="sy0">,</span> consectetuer adipiscing elit. <span class="me1">Cras</span> lorem. <span class="me1">Proin</span> laoreet fringilla sem. <span class="me1">Pellentesque</span> malesuada<span class="sy0">,</span> urna tristique ornare feugiat<span class="sy0">,</span> turpis wisi ultrices nisl<span class="sy0">,</span> ac vulputate dolor justo non sapien. <span class="me1">Sed</span> fermentum velit. <span class="me1">Cum</span> sociis natoque penatibus et magnis dis parturient montes<span class="sy0">,</span> nascetur ridiculus mus. <span class="me1">Etiam</span> at nulla. <span class="me1">Maecenas</span> tortor nulla<span class="sy0">,</span> adipiscing eget<span class="sy0">,</span> auctor sed<span class="sy0">,</span> cursus id<span class="sy0">,</span> quam. <span class="me1">Suspendisse</span> at sem nonummy orci lobortis ultrices. <span class="me1">Proin</span> odio est<span class="sy0">,</span> dictum id<span class="sy0">,</span> dictum nec<span class="sy0">,</span> ullamcorper sit amet<span class="sy0">,</span> sem. <span class="me1">Proin</span> ullamcorper lacus vitae risus. <span class="me1">Nulla</span> feugiat posuere erat. <span class="kw1">In</span> nec est ac eros lacinia congue. <span class="me1">Suspendisse</span> potenti. <span class="kw1">In</span> a ipsum rhoncus ipsum volutpat consectetuer.<span class="sy0">&lt;/</span>p<span class="sy0">&gt;</span>
    <span class="sy0">&lt;/</span>div<span class="sy0">&gt;</span>
<span class="sy0">&lt;/</span>body<span class="sy0">&gt;</span>
<span class="sy0">&lt;/</span>html<span class="sy0">&gt;</span></pre></div></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.codecouch.com/2006/05/creating-a-coloured-gradient-background-without-images/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How do I use the  tag?</title>
		<link>http://www.codecouch.com/2005/12/how-do-i-use-the-script-tag/</link>
		<comments>http://www.codecouch.com/2005/12/how-do-i-use-the-script-tag/#comments</comments>
		<pubDate>Fri, 23 Dec 2005 14:20:26 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.codecouch.com/?p=115</guid>
		<description><![CDATA[I use Javascript every day in my web projects - and have often been asked for details on how to use the <script> tag correctly. This post gives details on the correct use and links through the W3C with the formal specifications.]]></description>
			<content:encoded><![CDATA[<p>I use Javascript every day in my web projects &#8211; and have often been asked for details on how to use the <b>script</b> tag correctly. The W3C have a formal description of the <b>script</b> tag which includes a summary of the required (and optional) attributes.</p>
<p>In the past, browsers have used various techniques to handle the <b>script</b> contents… and this has had a long lasting effect on the way we use this tag in our current projects. The most abused attribute remains in common use today (even though has been deprecated in HTML 4.01 and XHTML 1.0 Strict) &#8211; the language attribute. Instead of specifying the language, it is now standard to specify the MIME type through use of the type attribute &#8211; and it is important to note that this is the only required attribute for the <b>script</b> tag.</p>
<div class="seeThrough h2Pod "><div class="seeThroughTop"><span class="tl"></span><span class="tr"></span><span class="t"></span></div><div class="seeThroughMiddle"><span class="r"></span><span class="l"></span><span class="m"></span><div class="seeThroughContent">
	<h2>Inline Javascript</h2>
</div></div><div class="seeThroughBottom"><span class="bl"></span><span class="br"></span><span class="b"></span></div></div>

<p>If you are including some Javascript in the document itself, then you would use a construct similar to this:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="javascript" style="color: #000000;"><span class="sy0">&lt;</span>script type<span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span><span class="sy0">&gt;</span>
<span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">&quot;Hello world!&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="sy0">&lt;/</span>script<span class="sy0">&gt;</span></pre></div></div></div>

<p>If you are delivering this content in a document that is using an XHTML doctype, then you should comment the data between the <b>script</b> tags (if you are unable to include it as an external Javascript file &#8211; see below) so that it is not parsed client-side. In the past you would often see a similar technique in use to “hide the code from older browsers” (note that the following example shows the correct way to use comments in an XHTML document using CDATA):</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="javascript" style="color: #000000;"><span class="sy0">&lt;</span>script type<span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span><span class="sy0">&gt;</span>
<span class="co1">//&lt;![CDATA[</span>
<span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">&quot;Hello world!&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="co1">//]]&gt;</span>
<span class="sy0">&lt;/</span>script<span class="sy0">&gt;</span></pre></div></div></div>

<p>There is no point using the CDATA comments above in a non-XHTML page at all. Nor is there any value in using the following kind of comments (whether you are working on an HTML or an XHTML document). This commenting was widely used to prevent “old browsers” seeing the Javascript. Nobody uses these “old browsers” for regular web use (and if they did, most web sites that use Javascript would break anyway)… so there is absolutely no point in including the comments:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="javascript" style="color: #000000;"><span class="sy0">&lt;</span>script type<span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span><span class="sy0">&gt;</span>
<span class="co1">//&lt;!--</span>
<span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">&quot;Hello world!&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="co1">//--&gt;</span>
<span class="sy0">&lt;/</span>script<span class="sy0">&gt;</span></pre></div></div></div>

<div class="seeThrough h2Pod "><div class="seeThroughTop"><span class="tl"></span><span class="tr"></span><span class="t"></span></div><div class="seeThroughMiddle"><span class="r"></span><span class="l"></span><span class="m"></span><div class="seeThroughContent">
	<h2>Linked Javascript</h2>
</div></div><div class="seeThroughBottom"><span class="bl"></span><span class="br"></span><span class="b"></span></div></div>

<p>If you are including an external Javascript file in the document, then you would use a construct similar to this:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="javascript" style="color: #000000;"><span class="sy0">&lt;</span>script type<span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> src<span class="sy0">=</span><span class="st0">&quot;helloworld.js&quot;</span><span class="sy0">&gt;&lt;/</span>script<span class="sy0">&gt;</span></pre></div></div></div>

<p>The only difference between inline and linked Javascript is that the latter uses the src attribute to specify where the linked Javascript file resides.</p>
<div class="seeThrough h2Pod "><div class="seeThroughTop"><span class="tl"></span><span class="tr"></span><span class="t"></span></div><div class="seeThroughMiddle"><span class="r"></span><span class="l"></span><span class="m"></span><div class="seeThroughContent">
	<h2>Setting a default scripting language</h2>
</div></div><div class="seeThroughBottom"><span class="bl"></span><span class="br"></span><span class="b"></span></div></div>

<p>When writing well formed documents, you should include information about the default scripting language. This can be done using a meta tag in the document:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="html4strict" style="color: #000000;"><span class="sc2"><span class="kw2">&lt;META</span> <span class="kw3">http-equiv</span><span class="sy0">=</span><span class="st0">&quot;Content-Script-Type&quot;</span> <span class="kw3">content</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span><span class="kw2">&gt;</span></span></pre></div></div></div>

<p>This is good practice, but is not required &#8211; especially if the server is already serving linked Javascript files as “text/javascript” (or more correctly: “text/x-javascript”).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codecouch.com/2005/12/how-do-i-use-the-script-tag/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
