IE Update disables Flash. Flash navigation is stupid. If you have to embed Flash, use FlashObject.
Due to the Eolas patent case , a new update to Internet Explorer will no longer automatically allow user interaction with plugins which are embeded in webpages. Think Flash navigation, music players (Quicktime, Windows Media, Real Audio), Java applets, etc. The applets will be usable, but only once you enable them, usually by clicking on them. (see the demo screencast here ).
The update is already out on Windows Update - it's optional now, but I'm sure it will be mandatory within the next few months. It's described as a minor update, but I think people will be pretty surprised by this one.
Now, I can't say that I'm heartbroken by how this will affect my browsing experience. For one, I don't use IE all that much, and who knows if Eolas will ever enforce this patent against open source browsers since there's no money in it. More than that, though, I dislike most embedded applets that do things I didn't tell them to do . I don't like web pages that start playing music when a page loads. I think Flash navigation is annoying, inaccessible, and completely unnecessary. If a page is going to make good use of Flash or Java - actually do something interesting, like a screencast or a game - then a little click to activate it isn't that big a deal.
As a developer, though, this is kind of a pain. The thing is, there's a legal loophole that will allow automatic activation of applets as long as they're loaded via an external file, so some trivial javascript can load an activated applet without any user interaction. The reason is that the patent only covers automatic applets as long as they are directly included in the HTML file, so loading them via an external javascript file is fair game. So, in reality this is only going to be an inconvenience for web developers. Clients will know that other sites have dancing clowns and disco in their menus, so it can be done. Just do it.1
Now, the code to load Flash files (or other applets) from javascript is pretty simple, but I sure hope professional web developers will put some thought into this and avoid the temptation to just hack a bunch of javascript includes together and call it done. Here are two better solutions:
- Get rid of it. This especially applies to Flash navigation, for tons of reasons:
- It's not cool anymore. Really. It stopped being cool about five years ago, now it just looks amateur. Sure there are exeptions to this rule, but odds are you're not one of them.
- It's not accessible, and probably not very usable. That could cost you users, but more importantly it could get you in legal trouble.
- It hurts your search engine rankings and site searchability. Some search engines will index the Flash file, but they don't interpret it. If there's any logic, database action, or external files involved there's a good chance the links won't be followed.
- It's not very maintainable. Ease of maintenance and updatability is very important. Sites that aren't fixed and updated don't get used. It's easier to fix and deploy a spelling error or address change in a text based HTML file than in a Flash application. With Flash being one big file, you really should retest the whole thing every time you redeploy; with HTML I can make spot changes and be confident I haven't broken anything. A website built with web standards can be redesigned with a CSS file change (ala csszengarden); Flash redesigns are much more work. As a side note, in my experience no one properly versions their Flash source files. It's very rare that anyone can even find their Flash source files a year after the site has gone live.
- It's almost always totally unnecessary. You can build really nice navigation that's cool, accessible, searchable, and maintainable with CSS and minimal javascript. You can get fancy effects - fades, animation, etc. - with some simple javascript includes and a few minutes enabling the effects via CSS (see my previous article on that here). The point is, if you're using Flash to animate and fade you're doing things wrong.
- If you must use Flash, use FlashObject. There are still more more problems with Flash, but FlashObject solves them:
- There is no way to embed Flash in a page that is (a) cross-browser and (b) valid HTML / XHTML. Macromedia's sample code uses an <EMBED> tag inside an <OBJECT> so it will work in most browsers, but <EMBED> isn't a valid HTML / XHTML tag.
- Plugin detection isn't handled by browsers. If the user doesn't have Flash installed, or has it disabled, your site looks stupid and isn't usable. Note that Flash won't currently install under non-admin user accounts, so the possbility that your user won't have Flash installed may grow over time.
FlashObject solves both these problems - plus the disabled by default issue I mentioned before - by replacing HTML content via a javascript include. You build a page in valid (X)HTML and include a placeholder div where your Flash content will go. Then you write two lines of javascript which tells the FlashObject library to replace your div with the Flash content. The div can contain alternative content that's valid, accessible, searchable, etc., which will be be delivered to those who can't or won't view your Flash content (including search engine spiders). Since this solution loads the flash via the external FlashObject javascript include, it will be automatically enabled as well - which means that if you're using another plugin, you should first look for a prewritten include that uses a similar, and if you have to write your own that you follow this model: replace valid HTML via a simple javascript call. Here's some sample code, quoted from the FlashObject page:
<div id="flashcontent">
This text is replaced by the Flash movie.
</div>
<script type="text/javascript">
var fo = new FlashObject("movie.swf", "mymovie", "200", "100", "7", "#336699");
fo.write("flashcontent");
</script>
1 All of the major plugin providers have provided references on how to fix this - Apple, Macromedia, Microsoft, and Real. I don't recommend following them, though, which is why they're just in a footnote.