<?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>Muffin Research Labs &#187; Browsers</title>
	<atom:link href="http://muffinresearch.co.uk/archives/category/browsers/feed/" rel="self" type="application/rss+xml" />
	<link>http://muffinresearch.co.uk</link>
	<description>the personal blog of Stuart Colville covering modern web development techniques and best practices</description>
	<lastBuildDate>Thu, 26 Jan 2012 00:14:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>IE8 will now render as IE8 by default</title>
		<link>http://muffinresearch.co.uk/archives/2008/03/04/ie8-will-now-render-as-ie8-by-default/</link>
		<comments>http://muffinresearch.co.uk/archives/2008/03/04/ie8-will-now-render-as-ie8-by-default/#comments</comments>
		<pubDate>Tue, 04 Mar 2008 09:18:22 +0000</pubDate>
		<dc:creator>Stuart Colville</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://muffinresearch.co.uk/archives/2008/03/04/ie8-will-now-render-as-ie8-by-default/</guid>
		<description><![CDATA[Good news! The IE team have decided to revert their decision on compatibility which would have meant IE8 would render sites with the IE7 engine if a ua-x-compatible meta tag isn&#8217;t defined. Sites will now render with the browser&#8217;s current rendering engine by default, so sites will be rendered as IE8 by default when IE8 [...]]]></description>
			<content:encoded><![CDATA[<p>Good news! <a href="http://blogs.msdn.com/ie/archive/2008/03/03/microsoft-s-interoperability-principles-and-ie8.aspx">The IE team have decided to revert their decision on compatibility</a> which would have meant IE8 would render sites with the IE7 engine if a ua-x-compatible meta tag isn&#8217;t defined. Sites will now render with the browser&#8217;s current rendering engine by default, so sites will be rendered as IE8 by default when IE8 is released. </p>
<p>This is good news as it shows that Microsoft are no longer looking to support the past. It&#8217;s a big deal for them to take this decision and I feel that this is a clear sign that they are supporting web-standards moving forward. </p>
<p>This is also a great result for the few people that stood-up and <em>constructively</em> criticised the initial announcement. Their voice was heard.</p>
]]></content:encoded>
			<wfw:commentRss>http://muffinresearch.co.uk/archives/2008/03/04/ie8-will-now-render-as-ie8-by-default/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Does setTimeout solve the DOMContentLoaded problem?</title>
		<link>http://muffinresearch.co.uk/archives/2008/02/15/does-settimeout-solve-the-domcontentloaded-problem/</link>
		<comments>http://muffinresearch.co.uk/archives/2008/02/15/does-settimeout-solve-the-domcontentloaded-problem/#comments</comments>
		<pubDate>Fri, 15 Feb 2008 00:33:25 +0000</pubDate>
		<dc:creator>Stuart Colville</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://muffinresearch.co.uk/archives/2008/02/15/does-settimeout-solve-the-domcontentloaded-problem/</guid>
		<description><![CDATA[I&#8217;ve recently been building a simple framework for testing the performance of arbitrary JavaScript code. Whilst doing so I was looking at the some information on setTimeout in &#8220;JavaScript the Definitive Guide&#8221; by David Flanagan. One paragraph made me think of the DOMContentLoaded Problem: &#8220;In practice, setTimeout() tells the browser to invoke the function when [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recently been building a simple framework for testing the performance of arbitrary JavaScript code. Whilst doing so I was looking at the some information on setTimeout in <a href="http://tinyurl.com/2634ue">&#8220;JavaScript the Definitive Guide&#8221; by David Flanagan</a>. </p>
<p>One paragraph made me think of the DOMContentLoaded Problem:</p>
<blockquote><p>&#8220;In practice, <code>setTimeout()</code> tells the browser to invoke the function when it has finished running the event handlers for any currently pending events and has finished updated the current state of the document&#8221;</p></blockquote>
<p>I thought to myself; what if you apply that to a situation where you don&#8217;t want to wait for window.onload to fire and use it as a way of emulating DOMContentLoaded.</p>
<p>So I remembered this today and set about creating a noddy little test to see if setTimeout would behave in the way that it sounded like it should do.</p>
<p>I found that setTimeout with a delay of zero milliseconds calls the function without waiting for other resources to finish loading on <em>most</em> modern browsers (IE6/7, firefox and Safari). The only fly in the ointment is Opera. However Opera (Like Mozilla) <em>does</em> have DOMContentLoaded, so it makes sense to use DOMContentLoaded for both Mozilla and Opera.</p>
<pre><code>function DOMReady(f){
  if (/(?!.*?compatible|.*?webkit)^mozilla|opera/i.test(navigator.userAgent)){ // Feeling dirty yet?
    document.addEventListener("DOMContentLoaded", f, false);
  }else{
    window.setTimeout(f,0);
  }
} </code></pre>
<p><a href="http://muffinresearch.co.uk/code/javascript/setTimeout/">Try the demo and see what you think.</a></p>
<h3>In Conclusion</h3>
<p>setTimeout seems to be another possibility for working around the DOMContentLoaded issues. To be clear however, I&#8217;m not saying this is the most bombproof method and it certainly warrants further testing before being considered as a trusted solution.</p>
<p>Any thoughts and suggestions welcome. </p>
<h3>Related Reading</h3>
<ul class="ext">
<li><a href="http://snook.ca/archives/javascript/settimeout_solve_domcontentloaded/">Further testing on this idea from Jonathan Snook</a></li>
<li><a href="http://dean.edwards.name/weblog/2005/09/busted/">The window.onload Problem &#8211; Solved!</a></li>
<li><a href="http://dean.edwards.name/weblog/2006/06/again/">window.onload (again)</a></li>
<li><a href="http://www.kryogenix.org/days/2007/09/26/shortloaded">DOMContentLoaded for IE, Safari, everything, without document.write</a></li>
<li><a href="http://javascript.nwbox.com/IEContentLoaded/">IEContentLoaded</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://muffinresearch.co.uk/archives/2008/02/15/does-settimeout-solve-the-domcontentloaded-problem/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Running a Safari 2 Standalone Alongside Safari 3</title>
		<link>http://muffinresearch.co.uk/archives/2007/11/20/running-safari-2-alongside-safari-3/</link>
		<comments>http://muffinresearch.co.uk/archives/2007/11/20/running-safari-2-alongside-safari-3/#comments</comments>
		<pubDate>Tue, 20 Nov 2007 13:47:42 +0000</pubDate>
		<dc:creator>Stuart Colville</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://muffinresearch.co.uk/archives/2007/11/20/running-safari-2-alongside-safari-3/</guid>
		<description><![CDATA[Before updating OSX to 10.4.11 I decided to create a standalone Safari with the excellent instructions provided by Michel Fortin on his blog. The main reason to keep Safari 2 is due to the need to continue to test sites with Safari 2 as this is still (at time of writing) the current version of [...]]]></description>
			<content:encoded><![CDATA[<p>Before updating OSX to 10.4.11 I decided to create a standalone Safari with the <a href="http://michelf.com/weblog/2005/multi-safari/">excellent instructions provided by Michel Fortin on his blog</a>. The main reason to keep Safari 2 is due to the need to continue to test sites with Safari 2 as this is still (at time of writing) the current version of Safari that is an A-grade browser in the <a href="http://developer.yahoo.com/yui/articles/gbs/">Yahoo Graded browser support strategy</a>. </p>
<p>Note: if you don&#8217;t want to go to the lengths of creating your own Safari Standalone <a href="http://michelf.com/projects/multi-safari/">Michel has provided ready made apps</a> for download.</p>
<p>Although these versions appear (from my limited testing) to work fully as expected please do bear in mind that this isn&#8217;t 100% the same as having the original version of Safari (see the <a href="http://michelf.com/weblog/2005/multi-safari/">comment by Alex Rosenberg on Michel&#8217;s site</a>).<br />
<a href="http://michelf.com/">Michel</a> has done a great job providing these standalone versions but I would ideally like to see Apple go to the lengths of providing &#8220;official&#8221; standalone Safari builds for developers.</p>
<h3>Additional points to note</h3>
<p>I renamed the binary to safari-2.04 instead of TrueSafari and I edited the <a href="http://michelf.com/weblog/2005/multi-safari/">shell-script linked in the instructions</a> accordingly. This is the same process Michel used to create the ready-made apps available from here: <a href="http://michelf.com/projects/multi-safari/">http://michelf.com/projects/multi-safari/</a></p>
<p>To show the version in the taskbar you can change the appropriate key in  /Applications/Safari-2.04.app/Contents/info.plist from this:</p>
<pre><code>&lt;key&gt;CFBundleName&lt;/key&gt;
&lt;string&gt;Safari&lt;/string&gt;</code></pre>
<p>to</p>
<pre><code>&lt;key&gt;CFBundleName&lt;/key&gt;
&lt;string&gt;Safari-2.04&lt;/string&gt;</code></pre>
<p>An issue I came across with the standalone that I had built was that one of my colleague&#8217;s machines failed to load the standalone app. Console reported the following:</p>
<pre><code>dyld: NSAddImage() error
dyld: Symbol not found: __ZNK3KJS6JSCell9getUInt32ERj
 Referenced from: /System/Library/PrivateFrameworks/JavaScriptGlue.framework/Versions/A/JavaScriptGlue
 Expected in: /Applications/Safari-2.04.app/Contents/MacOS/../Frameworks/JavaScriptCore.framework/Versions/A/JavaScriptCore
/System/Library/PrivateFrameworks/JavaScriptGlue.framework/Versions/A/JavaScriptGlue</code></pre>
<p>To fix this I dropped a copy of my /System/Library/PrivateFrameworks/JavaScriptGlue.framework (prior to 10.4.11 update) inside the app in <code>/Applications/Safari-2.04.app/Contents/Frameworks/</code> and this resolved the issue.</p>
<p>Lastly and purely from an aesthetic point of view I decided to use a bronze Safari icon so that the three versions of Safari on my machine will be represented as follows:</p>
<dl class="tb">
<dt>Safari 2.04</dt>
<dd>Bronze</dd>
<dt>Safari 3</dt>
<dd>Current</dd>
<dt>Webkit</dt>
<dd>Gold</dd>
</dl>
<p><img src="http://muffinresearch.co.uk/i/bronze-silver-gold.jpg" alt="Bronze, Silver and Gold Safari icons" /></p>
<p>You can download my icon as both an icns file and the icon applied to a folder here: <a href="http://muffinresearch.co.uk/downloads/safari-bronze.zip">http://muffinresearch.co.uk/downloads/safari-bronze.zip</a> </p>
<p>If you&#8217;d like to do something different with your Safari icon, Ian lloyd has some <a href="http://lloydi.com/blog/2006/10/02/how-to-create-and-edit-icons-in-mac-os-x/">nice instructions on how to modify app icons</a></p>
]]></content:encoded>
			<wfw:commentRss>http://muffinresearch.co.uk/archives/2007/11/20/running-safari-2-alongside-safari-3/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Bug: IE7 absolutely positioned italics</title>
		<link>http://muffinresearch.co.uk/archives/2006/12/28/bug-ie7-absolutely-positioned-italics/</link>
		<comments>http://muffinresearch.co.uk/archives/2006/12/28/bug-ie7-absolutely-positioned-italics/#comments</comments>
		<pubDate>Thu, 28 Dec 2006 16:06:57 +0000</pubDate>
		<dc:creator>Stuart Colville</dc:creator>
				<category><![CDATA[Browsers]]></category>

		<guid isPermaLink="false">http://muffinresearch.co.uk/archives/2006/12/28/bug-ie7-absolutely-positioned-italics/</guid>
		<description><![CDATA[I recently discovered a rather bizarre bug that only seems to affect IE7. If you absolutely position italic text of any kind (text made italic through authors styling or something that is styled via the default browser stylesheet such as ems.) IE7 seems to screw up the rendering and ends up creating a horizontal scrollbar. [...]]]></description>
			<content:encoded><![CDATA[<p>I recently discovered a rather bizarre bug that only seems to affect <a href="http://www.microsoft.com/windows/ie/default.mspx">IE7</a>. If you absolutely position italic text of any kind (text made italic through authors styling or something that is styled via the default browser stylesheet such as ems.) IE7 seems to screw up the rendering and ends up creating a horizontal scrollbar. This problem is best illustrated with an <a href="http://muffinresearch.co.uk/code/xhtmlandcss/ie7italics/">example page (View in IE7 to see the horizontal scrollbar)</a>. If you override the font-style then the scrollbar dissappears. Strange.</p>
<p>IE6 doesn&#8217;t have any problem with the same code which is interesting and suggests that this bug has been introduced into IE7.</p>
<p>I also noted that <a href="http://muffinresearch.co.uk/code/xhtmlandcss/ie7italics/index2.html">the same problem doesn&#8217;t exist when the page is rendered in quirksmode.</a></p>
<h3>Figure 1: IE7 See the horizontal scrollbar.</h3>
<p><img src="http://muffinresearch.co.uk/i/ie7italics/ie7.png" alt="screenshot showing horizontal scrollbars in IE7 caused by absolutely positioning italicized text" /></p>
<h3>Figure 2: IE6 No problem</h3>
<p><img src="http://muffinresearch.co.uk/i/ie7italics/ie6.png" alt="screenshot showing absolutely positioned italicized text" /></p>
]]></content:encoded>
			<wfw:commentRss>http://muffinresearch.co.uk/archives/2006/12/28/bug-ie7-absolutely-positioned-italics/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>Updating extensions for Firefox 2.0</title>
		<link>http://muffinresearch.co.uk/archives/2006/11/08/updating-extensions-for-firefox-20/</link>
		<comments>http://muffinresearch.co.uk/archives/2006/11/08/updating-extensions-for-firefox-20/#comments</comments>
		<pubDate>Wed, 08 Nov 2006 12:57:32 +0000</pubDate>
		<dc:creator>Stuart Colville</dc:creator>
				<category><![CDATA[Browsers]]></category>

		<guid isPermaLink="false">http://muffinresearch.co.uk/archives/2006/11/08/updating-extensions-for-firefox-20/</guid>
		<description><![CDATA[It would appear that plenty of Firefox extension developers haven&#8217;t got around to fixing their extensions to work with Firefox 2. In many cases these extensions don&#8217;t work due to the maxVersion in the install.rdf file inside the xpi being set to only allow extensions to work with Firefox 1.5 I published some instructions for [...]]]></description>
			<content:encoded><![CDATA[<p>It would appear that plenty of Firefox extension developers haven&#8217;t got around to fixing their extensions to work with Firefox 2. In many cases these extensions don&#8217;t work due to the maxVersion in the install.rdf file inside the xpi being set to only allow extensions to work with Firefox 1.5</p>
<p><a href="http://muffinresearch.co.uk/archives/2005/11/30/firefox-15-launched/">I published some instructions for updating your extensions to work for 1.5</a> when that was launched so I though I&#8217;d update those instructions for Firefox 2 in case it&#8217;s useful to one or two people.</p>
<h3>Increasing maxVersion to allow extensions to work in Firefox 2.0</h3>
<ol>
<li>Download to your desktop the extension you wish to get working</li>
<li>Rename the .xpi file to .zip</li>
<li>Open the zip file</li>
<li>Either unpack the install.rdf file or open it for editing within your zip application if that is supported.</li>
<li>Change the maxVersion to 2.*</li>
<li>Repack the zip file or update the zip if you are editing within your archive app (should happen automatically &#8211; double check the file has been updated)</li>
<li>Rename the .zip file to .xpi</li>
<li>Test the extension. To install drag the xpi file onto an open window.</li>
</ol>
<p>In due course the developers will no doubt release new version in which case these temporary hacked versions will be overwritten by the automated update process. However if the developer doesn&#8217;t use this method you will need to manually check their sites for updates.</p>
<p>Feel free to drop a comment linking your favorite extensions that you have fixed to work in Firefox 2.0.</p>
<p class="update">Update: AlastairC mentions in the comments below, the possibility of using the <a href="http://www.mrtech.com/extensions/local_install/index.html">local install extension</a> to be able to override the maxVersion on a per plugin basis. Sounds well worth checking out.</p>
<p>NB: I am aware that there is a way to bypass maxVersion checks on extensions using the <a href="http://users.blueprintit.co.uk/~dave/web/firefox/nightly">nightly tester tools</a>, but I personally would avoid this and prefer to fix each extension individually as this gives more control.</p>
]]></content:encoded>
			<wfw:commentRss>http://muffinresearch.co.uk/archives/2006/11/08/updating-extensions-for-firefox-20/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>O2 thinks Camino is out of Date</title>
		<link>http://muffinresearch.co.uk/archives/2006/10/27/o2-thinks-camino-is-out-of-date/</link>
		<comments>http://muffinresearch.co.uk/archives/2006/10/27/o2-thinks-camino-is-out-of-date/#comments</comments>
		<pubDate>Thu, 26 Oct 2006 23:40:09 +0000</pubDate>
		<dc:creator>Stuart Colville</dc:creator>
				<category><![CDATA[Browsers]]></category>

		<guid isPermaLink="false">http://muffinresearch.co.uk/archives/2006/10/27/o2-thinks-camino-is-out-of-date/</guid>
		<description><![CDATA[I was amused to find when I visited the O2.co.uk website with camino, an alert box popped up saying &#8220;Your browser is out of date. Would you like to upgrade it now for a better user experience? (Highly recommended)&#8221;. Of course I clicked &#8220;ok&#8221; as I am always up for a better user experience. I [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://muffinresearch.co.uk/i/o2.jpg"><img src="http://muffinresearch.co.uk/i/o2.png" alt="O2 website with alert saying 'Your browser is out of date'"/><br />
</a></p>
<p>I was amused to find when I visited the O2.co.uk website with <a href="http://www.caminobrowser.org/">camino</a>, an alert box popped up saying &#8220;Your browser is out of date. Would you like to upgrade it now for a better user experience? (Highly recommended)&#8221;.</p>
<p>Of course I clicked &#8220;ok&#8221; as I am always up for a better user experience. I was sent to this page: <a href="http://www.o2.co.uk/browserupgrade?check=Netscape">http://www.o2.co.uk/browserupgrade?check=Netscape</a> which offered me a shiny new version of <a href="http://channels.netscape.com/ns/browsers/download.jsp">netscape</a> to replace my outdated Camino. The icing on the cake being the message, &#8220;There&#8217;s no version of Netscape 8 for mac!&#8221;.</p>
<p>Here&#8217;s the code that prompted the upgrade; a choice piece of hard to maintain browser detection.</p>
<pre><code>function browserUpgrade(){
	setCookie('alreadyVisitedOnce','yes');
	var NS, IE, aaa, OP, OP34, Moz, Pho, Saf, CW, PDA, LX;
	var NSVer, IEVer, OPVer, MozVer;

	Pho = navigator.vendor == "Phoenix";
	Moz = navigator.vendor == "Firefox";
	NS = (navigator.appName == "Netscape") &#038;&#038; !(Pho) &#038;&#038; !(Moz);
	IE = navigator.appVersion.indexOf("MSIE")!=-1;
	OP = navigator.userAgent.indexOf("Opera") > -1;
	Saf = navigator.userAgent.indexOf("Safari") > -1;
	CW = navigator.userAgent.indexOf("DigExt") > -1; //Is the browser a Carphone Warehouse?
	PDA = navigator.userAgent.indexOf("PPC") > -1; // Is the device a PDA?
	LX = navigator.platform.indexOf("Linux") > -1; //Is the OS platform Linux?
	// OD = navigator.userAgent == null; // OD = Old Devices

	if (NS) {
		if (navigator.vendorSub == null) {
		navvensub = navigator.appVersion;
		NSVer = navvensub.substr(navvensub.indexOf(" ").length, 1);
		NSVer = parseFloat(NSVer);
		} else {
		// using vendorSub object, as appVersion comes out as 5.0 (from Mozilla/5) also if it is NS 6 or NS 7 !!!
		navvensub = navigator.vendorSub;
		NSVer = navvensub.substr(navvensub.indexOf(".").length, 1);
		NSVer = parseFloat(NSVer);
			}
		}

	if (Moz) {
		//MozVer = parseFloat(navigator.vendorSub);
		/*this used to be fine previously. FireFox uses different ways to define the vendorSub dependin on the release.
		FireFox .93	  = 0.9.3
		FireFox 1.0PR = 0.1
		FireFox .93   = 1.0.3
		*/
		MozVer = navigator.vendorSub.split(".");
			if (MozVer[2] == null) {
			MozVer = MozVer[0]+MozVer[1];
			} else {
			MozVer = MozVer[0]+MozVer[1]+MozVer[2];
			}
		}

	else if (IE) {
		navag = navigator.userAgent;
		IEVer = navag.substr(navag.indexOf("MSIE ")+("MSIE ").length, 4);
		IEVer = parseFloat(IEVer); 

		if (OP) {
			OPVer = navag.substr(navag.indexOf("Opera ")+("Opera ").length, 4);
			OPVer = parseFloat(OPVer);
			}
		}

	//if ((NS) &#038;&#038; !(Saf) &#038;&#038; !(LX) &#038;&#038; (NSVer < 7)) {
	if ((NS) &#038;&#038; !(LX) &#038;&#038; !(Saf) &#038;&#038; (NSVer < 7)) {
			redir("Netscape");
	}

	if (Pho) {
		var redirectURL = "http://www.o2.co.uk/browserupgrade?check=Mozilla";
		if (document.images) window.location.replace(redirectURL); // if Netscape
		else window.location = redirectURL; // else if not Netscape
	}

	if (Moz) {// in case browser is Mozilla Firefox
			if (MozVer<103) { // and navigator.vendorSub is less than 1.0.3
			redir("Mozilla");
			}
	}

	else if ((IE) &#038;&#038; !(CW) &#038;&#038; !(PDA) &#038;&#038; !(LX)) {
		if ((OP) &#038;&#038; ( OPVer < 8 ) {
				redir("Opera");
		}
		else if(IEVer <= 5) {
				redir("IE");
			}
		}
}</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://muffinresearch.co.uk/archives/2006/10/27/o2-thinks-camino-is-out-of-date/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Run Firefox 2.0 and 1.5 side by side</title>
		<link>http://muffinresearch.co.uk/archives/2006/10/25/run-firefox-20-and-15-side-by-side/</link>
		<comments>http://muffinresearch.co.uk/archives/2006/10/25/run-firefox-20-and-15-side-by-side/#comments</comments>
		<pubDate>Wed, 25 Oct 2006 11:28:17 +0000</pubDate>
		<dc:creator>Stuart Colville</dc:creator>
				<category><![CDATA[Browsers]]></category>

		<guid isPermaLink="false">http://muffinresearch.co.uk/archives/2006/10/25/run-firefox-20-and-15-side-by-side/</guid>
		<description><![CDATA[If you want to run Firefox 2.0 and Firefox 1.5 side by side you can with a Portable Firefox for both Mac and Windows. These applications allow you to keep separate profiles so you effective keep the older version of firefox as a standalone with a copy of your current profile. Update: I&#8217;ve updated the [...]]]></description>
			<content:encoded><![CDATA[<p>If you want to run Firefox 2.0 and Firefox 1.5 side by side you can with a Portable Firefox for both Mac and Windows. These applications allow you to keep separate profiles so you effective keep the older version of firefox as a standalone with a copy of your current profile.</p>
<p class="update">Update: I&#8217;ve updated the mac instructions &#8211; 27/10/06</p>
<h3>Instructions for mac (OSX 10.4+ only):</h3>
<p>Note: To save yourself the trouble of carrying out steps 1-9 you can <a href="http://muffinresearch.co.uk/downloads/PortableFirefox_1.5.0.7_en-GB-OSX_r4.0.zip">download a custom version of Portable firefox</a> with the script fix and the Firefox 1.5.0.7 already inside the Portable Firefox.app. All you need to do then is run it and copy your profile across as per steps 10-14.</p>
<ol>
<li>Back-up your current firefox 1.5 profile found in /Users/&lt;username&gt;/Library/Application  Support/Firefox/Profiles/xxxxxxxx.default first.</li>
<li>Next download portable PortableFirefox_2.0_en-US-OSX_r4.0 from <a href="http://www.freesmug.org/portableapps/firefox/">http://www.freesmug.org/portableapps/firefox/</a></li>
<li>Download Firefox 1.5.0.7 from <a href="http://releases.mozilla.org/pub/mozilla.org/firefox/releases/1.5.0.7/">http://releases.mozilla.org/pub/mozilla.org/firefox/releases/1.5.0.7/</a></li>
<li>Open the PortableFirefox_2.0_en-US-OSX_r4.0.dmg and drag the Portable Firefox folder to your Desktop.</li>
<li>Open Firefox 1.5.0.7.dmg</li>
<li>Open the Portable Firefox folder on your desktop.</li>
<li>Right Click Portable Firefox.app and select &#8220;Show package contents&#8221;</li>
<li>Copy the the Firefox.app from the mounted Firefox 1.5.0.7.dmg into Content/Resources/ of the Portable Firefox.app package.</li>
<li>Next edit the script file and comment out (with a #) the line <code>quitapp</code> at the bottom of the file</li>
<li>Run Portable Firefox.app</li>
<li>You will be asked do you want to copy an existing profile. Click copy, and then select the 1.5 profile to be copied.</li>
<li>Once this is done successfully firefox 1.5.0.7 will open.</li>
<li>Once you are happy quit this version of firefox and drag the Portable Firefox.app into your applications folder. If you want by all means rename it to Firefox.1.5.app</li>
<li>Next download and install firefox 2.0 in the usual way by dragging the firefox.app into applcations overwriting the old firefox.app If you want to be super careful you can rename the 1.5 firefox.app first so that it make rolling back easier (you did keep a copy of your profile right?) .</li>
</ol>
<h3>Instructions for mac:</h3>
<ol>
<li>Back-up your current firefox 1.5 profile found in /Users/&lt;username&gt;/Library/Application  Support/Firefox/Profiles/xxxxxxxx.default first.</li>
<li>Next download portable firefox (Portable Firefox_1.5.0.7_en-US-OSX_r3.0.dmg) from <a href="http://www.freesmug.org/portableapps/firefox/">http://www.freesmug.org/portableapps/firefox/</a></li>
<li>Open the .dmg and drag the portable firefox folder to your applications directory.</li>
<li>Copy the 1.5 profile you just backed up to /Applications/Portable Firefox OS X/app/</li>
<li>Rename the profile directory in /Applications/Portable  Firefox OS X/app/</li>
<li>Rename the profile you copied to profile</li>
<li>Test the standalone firefox 1.5.0.7</li>
<li>Next download and install firefox 2.0 in the usual way by dragging the firefox.app into applcations overwriting the old firefox.app If you want to be super careful you can rename the 1.5 firefox.app first so that it make rolling back easier (you did keep a copy of your profile right?) .</li>
<li>Finally  Drag the &#8220;OPEN Portable Firefox OSX.app&#8221; from /Applications/Portable Firefox OS X/ to your dock to run the standalone.</li>
</ol>
<h3>Instructions for PC:</h3>
<ol>
<li>Backup your current profile at C:\Documents and Settings\&lt;username&gt;\Application Data\Mozilla\Firefox\Profiles\xxxxxxx.default</li>
<li>Download portable firefox from <a href="http://portableapps.com/news/2006-09-26_-_firefox_portable_1.5.0.7">http://portableapps.com/news/2006-09-26_-_firefox_portable_1.5.0.7</a></li>
<li>Double click the .exe you&#8217;ve just downloaded. I recommend saving it to C:\Program Files\ the installer will create the directory FirefoxPortable for you in the location you specify</li>
<li>Copy the backed up firefox 1.5.0.7 profile to C:\Program Files\FirefoxPortable\Data\</li>
<li>Rename C:\Program Files\FirefoxPortable\Data\profile to profile.old</li>
<li>Rename your copied profile C:\Program Files\FirefoxPortable\Data\xxxxxx.default to profile</li>
<li>Test the installation by running: C:\Program Files\FirefoxPortable\FirefoxPortable.exe</li>
<li>Download and install firefox 2.0 over your original firefox installation. Make sure you keep a separate copy of your profile handy incase you need to roll back to 1.5.</li>
</ol>
<p>The only downside with the windows version is that you can&#8217;t run both portable firefox 1.5 and firefox 2.0 at exactly the same time but I guess I can live with that. PortableFirefox complains when Firefox 2.0 is already open and if you open firefox 2.0 when the portable app is open Firefox ends up loooking like firefox 1.5!</p>
]]></content:encoded>
			<wfw:commentRss>http://muffinresearch.co.uk/archives/2006/10/25/run-firefox-20-and-15-side-by-side/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Getting relative form actions with javascript</title>
		<link>http://muffinresearch.co.uk/archives/2006/10/24/getting-relative-form-actions-with-javascript/</link>
		<comments>http://muffinresearch.co.uk/archives/2006/10/24/getting-relative-form-actions-with-javascript/#comments</comments>
		<pubDate>Tue, 24 Oct 2006 22:10:35 +0000</pubDate>
		<dc:creator>Stuart Colville</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://muffinresearch.co.uk/archives/2006/10/24/getting-relative-form-actions-with-javascript/</guid>
		<description><![CDATA[The other day I needed to get data from a form and manipulate the &#8220;get&#8221; manually through javascript. For that to happen I needed to obtain the action attribute of the form. The action of this specific form had to be a relative url. What I found through testing was that whether I used getAttribute('action') [...]]]></description>
			<content:encoded><![CDATA[<p>The other day I needed to get data from a form and manipulate the &#8220;get&#8221; manually through javascript. For that to happen I needed to obtain the action attribute of the form. The action of this specific form <em>had</em> to be a relative url. What I found through testing was that whether I used <code>getAttribute('action') </code> or <code>action</code> the relative url would sometimes become a fully qualified url depending on which method you used in which browser. </p>
<table summary="This table shows which methods alter relative urls in a form's action attribute">
<thead>
<tr>
<th scope="col">Method</th>
<th scope="col">IE6</th>
<th scope="col">IE7</th>
<th scope="col">Firefox</th>
<th scope="col">Opera</th>
<th scope="col">Safari</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">getAttribute(&#8216;action&#8217;)</th>
<td>Relative</td>
<td>Relative</td>
<td>Relative</td>
<td>Fully Qualified</td>
<td>Relative</td>
</tr>
<tr>
<th scope="row">action</th>
<td>Relative</td>
<td>Relative</td>
<td>Fully Qualified</td>
<td>Fully Qualified</td>
<td>Relative</td>
</tr>
</tbody>
</table>
<p>The end result of this little oddity is that you are best using fully qualified urls in form actions. However if you do need to use a relative url as an action you need to be careful to make sure that you end up with what you are expecting. For example I&#8217;d use getAttribute(&#8216;action&#8217;) and just fix the result coming from opera by checking for the presence of &#8216;http&#8217;.</p>
<p><a href="http://muffinresearch.co.uk/code/javascript/action/">See the simple example</a></p>
]]></content:encoded>
			<wfw:commentRss>http://muffinresearch.co.uk/archives/2006/10/24/getting-relative-form-actions-with-javascript/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Opera Backstage Event, London</title>
		<link>http://muffinresearch.co.uk/archives/2006/09/24/opera-backstage-event-london/</link>
		<comments>http://muffinresearch.co.uk/archives/2006/09/24/opera-backstage-event-london/#comments</comments>
		<pubDate>Sun, 24 Sep 2006 00:58:45 +0000</pubDate>
		<dc:creator>Stuart Colville</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Events]]></category>

		<guid isPermaLink="false">http://muffinresearch.co.uk/archives/2006/09/24/opera-backstage-event-london/</guid>
		<description><![CDATA[Opera Software are running a special event in London on the 17th October at the Metra Bar, Leicester Square. The evening will feature a presentation about the vision of the company and new features coming out in the future and is aimed at web designers, developers and end-users alike. The official Opera invite can be [...]]]></description>
			<content:encoded><![CDATA[<p>Opera Software are running a special event in London on the 17th October at the Metra Bar, Leicester Square. The evening will feature a presentation about the vision of the company and new features coming out in the future and is aimed at web designers, developers and end-users alike. <a href="http://www.opera.com/company/events/backstage/2006/london/">The official Opera invite can be found on their website</a>. from there you need to RSVP to the email address supplied if you wish to attend.</p>
]]></content:encoded>
			<wfw:commentRss>http://muffinresearch.co.uk/archives/2006/09/24/opera-backstage-event-london/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Opera and NTLM Authentication</title>
		<link>http://muffinresearch.co.uk/archives/2006/04/11/opera-and-ntlm-authentication/</link>
		<comments>http://muffinresearch.co.uk/archives/2006/04/11/opera-and-ntlm-authentication/#comments</comments>
		<pubDate>Tue, 11 Apr 2006 16:02:41 +0000</pubDate>
		<dc:creator>Stuart Colville</dc:creator>
				<category><![CDATA[Browsers]]></category>

		<guid isPermaLink="false">http://muffinresearch.co.uk/archives/2006/04/11/opera-and-ntlm-authentication/</guid>
		<description><![CDATA[In the new Rentokil Office our proxy has changed to one that uses NTLM authentication. As a result we can&#8217;t use Opera (8.54) because it doesn&#8217;t yet support NTLM authentication (V9 Preview 2 has experimental NTLM support but it&#8217;s a bit sketchy). Fortunately for us a great open source package called APS comes to rescue. [...]]]></description>
			<content:encoded><![CDATA[<p>In the new Rentokil Office our proxy has changed to one that uses NTLM authentication. As a result we can&#8217;t use Opera (8.54) because it doesn&#8217;t yet support NTLM authentication (V9 Preview 2 has experimental NTLM support but it&#8217;s a bit sketchy). Fortunately for us a great open source package called <a href="http://ntlmaps.sourceforge.net/">APS</a> comes to rescue. This basically runs a local proxy that carries out the NTLM authentication with the proxy for you. All you do is point Opera to this local proxy and Opera goes back to running as expected. The downside is that this utility runs in a command prompt window which needs to be open whilst the proxy is running. To fix this problem this article goes through how to set-up and use APS as well as converting it to run as a service for a seamless experience.</p>
<h3>Getting APS up and running</h3>
<p>First step is to install the latest version of Python for windows if you don&#8217;t already have it. This is available from <a href="http://python.org">Python.org</a>. Make a note where this is installed as you will require the details later on. The default installation installs to C:\python24\ by default.</p>
<p>Second step is to download <a href="http://ntlmaps.sourceforge.net/">APS</a>. The <a href="http://apserver.sourceforge.net/">current version at time of writing is 0.9.8 and can be downloaded from here</a>. I unpacked it to C:\APS for simplicity.</p>
<p>To get APS working all that&#8217;s required is to edit the server.cfg file to match your settings,edit runserver.bat and set Opera up to use the local proxy. </p>
<p>First edit server.cfg. In my case I made the following changes:</p>
<pre><code>PARENT_PROXY:my.proxy.hostname
PARENT_PROXY_PORT:8080
NT_DOMAIN:myntdomain
USER:myusername
PASSWORD:mypassword</code></pre>
<p>Once you have made the changes save the file. Open up the C:\APS\runserver.bat and check that the path for python matches that of your installation. E.g: &#8220;C:\python24\python.exe&#8221; rember if you path has spaces put the path in quotes!</p>
<p>Next step is to run the server by double-clicking the batch file runserver.bat. This should open a command shell showing that it&#8217;s running.</p>
<p>Once that is done you just need to reconfigure the proxy settings in Opera to make it work with APS. In Opera go to Tools&#8594;Preferences&#8594;Advanced and hit the proxy servers button. Tick the box that says HTTP and write 127.0.0.1. Set the port to 5865. Do this for all the protocols you require (HTTPS FTP etc).</p>
<p>Press ok and then try navigating to your homepage e.g. <a href="http://www.google.co.uk">Google</a>. If this works then you&#8217;re halfway there. If not go back over the steps above and check you&#8217;ve got everything set-up right.</p>
<h3>Setting up APS to run as a service</h3>
<p>To get APS running as a service you will need to download instsrv.exe and srvany.exe or install them from the Windows 2k Resource kit. They are available as a download from various sites if you google it. Once you have them, run the following command: (this assumes you installed the two files to &#8220;C:\Program Files\Resource Kit\&#8221; &#8211; note the quotes in the example theses are required due to the space between &#8220;program&#8221; and &#8220;files&#8221;)</p>
<pre><code>"C:&#92;Program Files&#92;Resource Kit&#92;instsrv" NTLMProxy "C:&#92;Program Files&#92;Resource Kit&#92;srvany.exe"</code></pre>
<p>Check in the service management tool in administrative tools (start&#8594;Programs&#8594;administrative tools) and make sure there&#8217;s a service called NTLMProxy.</p>
<p>Next open up regedt32 (or regedit) (Press &#8220;Start&#8221; hit run and type regedt32 and hit enter) and find:<br />
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTLMProxy</p>
<ol>
<li>Add a new key called Parameters.</li>
<li>add new entry for Parameters key (Edit&#8594;Add Value) to set the Application name</li>
<li>Value Name should be Application</li>
<li>Data Type is REG_SZ</li>
<li>Set the String value to C:\APS\runserver.bat</li>
</ol>
<p>Add another new value for Parameters key (Edit&#8594;Add Value) to set the working directory:</p>
<ol>
<li>Value Name should be AppDirectory (That&#8217;s what worked for me though I&#8217;ve read in other placed you can use AppDir)</li>
<li>Data Type should be REG_SZ </li>
<li>String Value should be C:\APS</li>
</ol>
<p>Alternatively you can copy this text and create a reg file for easier registry manipulation.</p>
<pre><code>Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE&#92;SYSTEM&#92;CurrentControlSet&#92;Services&#92;NTLMProxy&#92;Parameters]
"Application"="C:&#92;&#92;APS&#92;&#92;runserver.bat"
"AppDirectory"="C:&#92;&#92;APS"</code></pre>
<p>Test the service starts and stops successfully from &#8220;services&#8221; in administrative tools. Open Opera and make sure everything works and that when it looks like it&#8217;s working you&#8217;re not viewing a cached page!</p>
<h3>Resources:</h3>
<ul class="ext">
<li><a href="http://ntlmaps.sourceforge.net/">NTLM APS</a></li>
<li><a href="http://www.python.org/">Python.org</a></li>
<li><a href="http://agiletesting.blogspot.com/2005/09/running-python-script-as-windows.html">Running Python  Scripts as a service</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://muffinresearch.co.uk/archives/2006/04/11/opera-and-ntlm-authentication/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

