19 Dec 2007

Deep linking for Silverlight

Why not? We started working on a new prototype and the first result is now available online. As you may see, this new thing will be called .NETAddress and will target not only Silverlight but also ASP.NET AJAX. Both Microsoft and Adobe are coming up with their own deep linking solutions, but we believe that our SWFAddress is the best offering for the moment and we want to bring its power to the .NET platform. The first step has already been made and we'll continue to work on AJAX and SEO support which will become available by the time of the Silverlight 2.0 release.

On a side note, Telerik just made their RadControls for Silverlight demos available online. Kudos to Niki Nedev and his colleagues for these great looking components.

19 Nov 2007

Blue Beanie Day

Most of you know who Jeffrey Zeldman is, but do you know who's the Bulgarian Zeldman? The funny photo of my friend Boby, recreating the "Designing with web standards" book cover has inspired the today's Blue Beanie Day announcement. If you care about web standards and accessibility then you can show your support by wearing a Blue Beanie on Monday, November 26, 2007. Switch your Facebook profile photo and post it to the Flickr pool. Enjoy!

16 Nov 2007

SWFAddress 2.0

The 2.0 release is finally here. For the first time we'll offer 2 download options because the file size of the package has grown up to 7 megabytes. If you want a bundle with 13 samples and documentation in 4 languages, go get the main one. Alternatively you can download a very light package containing only the ActionScript and JavaScript classes.

Here is the full changelog:

  • Support for multiple Flash movies and Ajax.
  • Event listeners for ActionScript and JavaScript.
  • New SWFAddressEvent class with support for INIT and CHANGE types.
  • New unobtrusive SEO technique.
  • Support for Adobe Flash CS3.
  • Support for Flash Player 7 with the Flash/JavaScript Integration Kit.
  • Support for SWFObject 2.0, UFO and Adobe's Active Content embedding.
  • New strict mode that adds trailing slashes by default.
  • New helper methods for link, window and popup management.
  • Ability to configure the script with query parameters.
  • The swfaddress.html is optional and not used by default.
  • Lots of new and improved Flash based samples.
  • Various optimizations and fixes.
  • API docs for ActionScript 3 and JavaScript.

Yesterday I had to make some last minute fixes, so please contact us immediately if you find anything broken. The chances for this are minimal, so just take some time to enjoy SWFAddress 2.0.


15 Nov 2007

SWFAddress 2.0 part 3 - Ajax and SEO

In the third and last part of the SWFAddress 2.0 presentation series I would like to give an overview of the two major features that this release introduces.

My personal experiments with deep linking actually started with Ajax and later I used the experience to create SWFAddress. Because of this the Ajax support has always been a matter of time and after the 1.1 release it became a standard user request. As you probably know there are many solutions of this type and every major JavaScript library have this functionality available natively or in the form of a plugin. The usage of SWFAddress will only make sense if it's better that the rest and now I'm going to explain why SWFAddress 2.0 really becomes the best offering at the moment.

As it was mentioned in the firts part of this series, SWFAddress is already deployed on many websites. This fact generated a huge amount of feedback and I have never been indifferent to appropriate and possible improvements. When we say that SWFAddress supports Opera 9 or Safari 1.3 we really ensure that it does so. While most of the other scripts are coming up with their serialization formats which are appropriate for specific framework or component state, SWFAddress tries to stick as much as possible with concepts clean URLs, standard query parameters and unobtrusive behavior. Features like custom titles, transparent page view tracking and event listeners are also not that common across similar solutions. And last but certainly not least, there are affordable support and development services which some people find useful.

For some time there is an Ajax sample available on the SWFAddress homepage which wasn't there without a reason. Today I'm happy to announce that we have an indexable unobtrusive Ajax content which can be accessed from Google, Yahoo or MSN. It's written in PHP and uses an innovative SEO mechanism which I'm going to describe below. To finalize the Ajax overview I also want to mention the Coherence sample that showcases how multiple Flash files can be used together with XHR and opens a lot of interesting opportunities.

Last year SWFAddress came up with a deep linking SEO solution that works. It was a little complex, but various people dared to use it and achieved the result they've dreamed about. The approach wasn't perfect, the complex URL rewriting was often causing troubles and worst of all was the fact that it was 'cloaking', a term that makes people paranoid because of the Google guidelines. We never experienced or heard about issues or penalties because of this technique, but overall this was a stopper for lots of the SWFAddress adopters. Companies like BLITZ implemented their own much safer SEO solution on top of SWFAddress, but it still isn't perfect because of the ambiguous deep link anchors generated with JavaScript.

With SWFAddress 2.0 I can offer you a new approach which in my opinion has enormous potential. It's not very simple because it relies on JavaScript redirection which should be non-sneaky, but it works quite well and produces the clean results that we want. The technique works like a progressive enhancement and a site like this can be first developed without any Flash or Ajax code. SWFAddress adds a tricky synchronous XHR on top of all this and ensures that after the redirect the HTML content won't be different. URL rewriting is used again, but this time it's very minimalistic and most of the logic is implemented with a server-side language. SWFAddress 2.0 offers you a choice between PHP, JSP or Rails and even if you don't like the encapsulation of the code, you'll be able to grab the core logic and implement it as you like.

As always we did some real testing using our SEO sample and the technique seems to work quite well.

The release is coming tomorrow. Make sure you won't miss it!

14 Nov 2007

SWFAddress 2.0 part 2 - Why it matters

SWFAddress 2.0 wasn't initially planned. Back in February I started adding improvements with version 1.2 in mind. Little by little the number of features and samples increased a lot and now we can really talk about a major release. I want to thank everyone who contributed ideas, requests, bug reports and comments.

One of the first and main goals was the support for event listeners. Since SWFAddress is a class that provides only static methods, the addition of the EventDispatcher capabilities was a little bit tricky. I've used composition over inheritance in order to create a unified interface for both AS2 and AS3 while utilizing the built-in Flash event classes internally. A new dedicated SWFAddressEvent class now carries information about the SWFAddress value, path and query parameters. All this wasn't implemented for AS1 and projects utilizing this version will still have to rely only on the SWFAddreess.onChange handler. More important is that the event dispatching feature is fully available in JavaScript which opens a lot of opportunities for websites that use Flash only partially.

As most of the SWFAddress users already know, the combination of ExternalInterface and getURL causes big troubles for both IE 6 and 7. We don't know the reason for this behavior, but since things like popup or new windows, email and PDF links are something absolutely normal, I've decided to ease the designer's life by providing two helper methods for dealing with such cases. The first one is SWFAddress.href(url, target) which can be used for any type of links and protocols, and the second is SWFAddress.popup(url, name, options, handler) which on the other hand can be used for popup windows. Additionally the built-in browser methods for history manipulations (back, forward, go) are also exposed to SWFAddress.

The automatic Google Analytics tracking that came out with SWFAddress 1.1 was well accepted, but sometimes when custom behavior is needed you may want to do it completely on your own. Initially I've added a method that disables the tracking, but with the recent news about the upcoming improved Analytics version this was changed. With SWFAddress 2.0 you can provide your custom tracking function and do whatever you want inside of it. The default value is still 'urchinTracker', but you can set it to 'null' if you want to disable the tracking, you can bind it to another tracking system or take advantage of the multiple trackers that the new Google Analytics will support.

Something that might not get very popular, but still interesting is that you can now disable the creation of history entries. This means that SWFAddress will still produce deep links, but the Back/Forward buttons won't work in the context of your website or application.

SWFAddress 1.x wasn't restrictive at all about the format of the deep links which resulted in a variety of naming conventions. While I understand everyone's preferences I want to push the usage of the right convention with the introduction of a strict mode. This means that by default you will get slashes in the beginning and at the end of the deep link value. If you use SWFAddress.setValue('/about') in the change handler you will get '/about/', if you set the value to 'portfolio?id=3' you will later receive '/portfolio/?id=3'. The most important change in terms of backwards compatibility is the fact that SWFAddress.setValue('') now becomes SWFAddress.setValue('/') which looks much more correct. People who want to apply the latest JavaScript improvements to existing projects can disable the strict mode and later in this post you will see how this can be done easily. Once again I want to mention that a good convention will ease any future developments regarding search engine optimization. If you use values like 'myDeepLink' or 'my_deep_link', Google won't threat them as three separate words. The best possible naming for the moment is 'my-deep-link' and if you do some investigation on this topic you'll understand what I'm taking about.

An interesting new feature is the ability to customize the script with query parameters. I haven't seen this technique before, but since I believe that less code is better I spent some time implementing it. The initialization of SWFAddress happens after the DOM of the page is loaded and it's easy to detect if there are configuration options applied. For example, if you want to use the new JavaScript file with an existing project that you don't want to recompile you can just include 'swfaddress.js?strict=0' in order to disable the new strict mode. The list of supported options includes only properties that should be set once, like 'strict', 'history', 'tracker' and 'html'. Since the swfaddress.html is now optional and disabled by default, you can enable it and disable the tracking at the same time by using 'swfaddress.js?html=true&tracker=null'.

With SWFAddress 2.0 you will no longer be limited to a single Flash object. Initially the project was targeting full Flash websites, but the reality shows that there are lots of interesting cases where multiple SWF files can utilize deep linking simultaneously.

So far so good, but there also many new things regarding the SWFAddress samples. All the SWFAddress 1.x Flash based samples no longer use strange arrays and calculated frame numbers. The logic now is much simplified and relies on frame labels. Additionally there's a detection that can point the user to a 404 error page when the requested deep link is not found. The SWF files are intentionally larger, so that the streaming can be tested and fixed in Internet Explorer. The MTASC sample is updated with different usages of the new link, popup and history helpers. The SEO sample was cleaned up and now it provides a better separation between the content and the presentation.

One of the key features of SWFAddress is the ability the work automatically with the Flash embedding script, which in most of the cases is my favorite SWFObject. Although it was always possible to use SWFAddress with other embedding approaches, now SWFAddress 2.0 adds the same out of the box transparent support for SWFObject 2.0, UFO and the Adobe's Active Content embedding script. Basically we want to cover every possible case and user preference and even that SWFObject 2.0 is still in beta testing, we're very happy to be compatible with it. Of course, there are dedicated samples for each scenario coming up on Friday.

Some of you might be exited that SWFAddress 2.0 also supports Flash Player 7. A few months ago I was asked by a client about such compatibility and the time good for implementing it. So there is a new IntKit sample coming which utilizes the Geoff Stearns' modified version of the Flash/JavaScript Integration Kit.

I'm happy to announce that I received valuable support from Jon MacDonald and Petyo Ivanov. Jon helped me with the documentation and contributed a lot to the new Flash CS3 sample which utilizes ActionScript 3.0 and SWFObject 2.0. My friend Petyo from the Bulgarian Flash community created a Ruby on Rails port of the new SEO sample, which can be a good base for any Rails hacker who want to build an indexable Flash or Ajax powered website.

SWFAddress 2.0 will come with an API reference available in multiple languages. Although it's not very extensive for the moment, it's a step in the right direction and we'll continue to improve it in the future.

Tomorrow I will write down some information about the new Ajax and SEO enhancements.


« Previous Entries | Next Entries »



Blog Search

Blog Categories

Blog posts

Recommended sites