Shaun Mccran

My digital playground

19
J
U
N
2009

IE 8 Https security warning pop up prompt annoyances

With the continue rollout of IE 8 some issues rise to the top of pile in the way the browser interacts with users. I can see 'why' this next issue occurs, but it doesn't handle the user interaction very well at all.

One of the more significant changes is the way that IE handles security exceptions. The message to the user has been changed to be inversed. Usually a user will look for an 'ok' button, but in this instance 'ok' is the wrong answer (see screenshot).

This pop up happens when the site you are on is serving up non https content on an https URL, IE images and style links that are http://url/image.src rather than https://.

The only work around for this seems to be either having a user manually edit their IE settings, like this:

view plain print about
1Tools > internet options > security > custom level > display mixed content: Enable

This isn't exactly reasonable though. The other fix is to change all your content to be https. This is potentially a huge code change depending on how your site works.

I was hoping to find an IE 8 compatibility setting to revert this back to the same handling method as IE 7, but that doesn't seem to exist. If anyone has any ideas feel free to comment!

03
J
U
N
2009

Google Analytics tracking across multiple domains

I recently came across an issue where an online application was crossing several domains during the customer experience, and the Google Analytics tracking was losing the referrer when they left the originating domain.

The usual Google Analytics tracking code is:

view plain print about
1<s cript type="text/javascript">
2var tracker = _gat._getTracker("#GACode#");
3            tracker._setDomainName("none");
4            tracker._setAllowLinker(true);
5            tracker._initData();
6            tracker._trackPageview();
7</script>

With the addition of two extra lines:

view plain print about
1tracker._setDomainName("none");
2tracker._setAllowLinker(true);

We can force each link to carry the cookie data over to the next domain, maintaining the user data throughout.

There is one other small change. Any href that transitions from one domain to the next has to include an onclick event that tells it to use a tracker method.

view plain print about
1<a href=http://domain.com/page.cfm onclick="tracker._link('http://domain.com/page.cfm'); return false;">Link Text </a>

We need to do something similar to form submissions:

view plain print about
1<form onsubmit="tracker._linkByPost(this)">

In this way the user cookie is maintained across multiple domains.

28
M
A
Y
2009

Gmail incorrectly displaying email content

I was recently working on an email application where users are sent emails on an automatic basis from the main web platform. There are many pitfalls to bulk email sending, and one of the oldest is how the email content will actually render in the users email client. Usually this is simply a case of people turning off images, or active scripting so they lose the majority of the design and layout.

Often people will include a 'Click here to view this online' link at the top of the email as a substitute, as it's much easier to control the how the content of a web page displays than an email.

A new pitfall (for me!) is Gmail. I found that sending exactly the same content to a hotmail account and a Gmail account resulted in two different displays!

The email is a three column layout, with both of the side columns being coloured to provide a bordered edging. In Hotmail it displayed as designed and tested, but in Gmail the third column was gone, and the central column had lost its shape and was overlapping the right area!

I eventually tracked down the error to an extra set of ending tags:

view plain print about
1</td>
2</tr>    
3</tbody>
4</table>

I spent a few hours looking for them at this point, but couldn't find them anywhere. After backtracking and examining the rest of the email (it is made of several component blocks) I discovered that there was a small table layout error in the code. This was causing G mail to attempt to fix it itself! It was reading through the code and interpreting the error and trying to correct it. It was writing in the end tags above itself, so I was never going to find them in a template!

So one to note for the future, G mail is strict about the code it renders, and will happily rewrite anything it doesn't like.

12
M
A
Y
2009

Harnessing the built in functionality of your development language

Too often these days I am amazed at the lack of forethought that goes into harnessing the built in functionality of a platform. I am talking specifically about the code base here. I'm thinking from high level objects, down to single small functions.

Take a moment to step back and examine your code use. Was there a reason that you picked that language? I'm guessing that there would have been some sort of analysis of the technologies on offer, and you picked the one you currently have.

All too often people shoot off in random directions of development without really examining the functionality that a platform already provides.

My main field of development experience is coldFusion, so I'll use this as my example. An all too common example of this is the 'application.cfm', or 'application.cfc' file. This file is a directory level extender. IE any files in the same directory, or indeed sub directories will inherit properties set in it. This makes it ideal for things like user access, and session management, and general data persistence. In almost every custom built framework I have come across someone has decided that they would rather handle this is a different fashion. Now I'm not against writing custom code, far from it, but I think it is very important to know what your code base can already do - here's why:

  • Why write functionality again, when it is already there?
  • Its a standard function of the code base. Its generally going to be more efficient than anything your writing 'custom'
  • Depending on wether your open source or not, it will have generally been tested by a huge variety of developers, and software companies. Has your custom function?
  • Bringing in new staff, and contractors and introducing them to custom functionality is time consuming. Chances are they already know, or have at least heard of most of the in built platform functionality.

There are obviously exceptions to the rule, sometimes the intrinsic code simply does not do exactly what you want it to. So before you race off and write a huge error handler, or string replacement method, take a look around, you might find that it is in fact already under the hood.

_UNKNOWNTRANSLATION_ /