This is the second version of my Flash ActionScript 3 XML-driven navigation menu — a little component I built back in 2009 and shipped as a free download. The original post still gets occasional traffic, so here is what it was, and what you should use in 2026.
What version 2 fixed
V2 of the menu fixed two bugs from the first release:
- The mouse hand cursor now updates correctly when hovering over a link.
- The CallArg helper class is now actually included in the download (it was missing from V1 because it lived in my default class path).
Features: fully XML-driven configuration, easy handling of absolute and relative links, and all classes shipped open-source (the caurina tweener library included).


The download is gone — here’s why
The sample files used to be downloadable from teliaz.com/mainmenu.zip. That domain is gone and the file was never archived, so the download no longer exists. The screenshots above are the only surviving artifacts.
Building this in 2026
Flash Player reached end of life in December 2020 and browsers removed support entirely, so an AS3 menu is a period piece now. The good news: the XML-driven menu pattern it implemented is easier today than it was in 2009. The whole component — data-driven items, nested submenus, hover states — is roughly an afternoon with HTML, CSS and a few lines of TypeScript:
<nav class="menu"></nav>
<script type="module">
const res = await fetch('menu.xml');
const xml = new DOMParser().parseFromString(await res.text(), 'application/xml');
const nav = document.querySelector('.menu');
for (const item of xml.querySelectorAll(':scope > menu > item')) {
const a = Object.assign(document.createElement('a'), { textContent: item.getAttribute('label') });
a.href = item.getAttribute('href') ?? '#';
const sub = item.querySelector('item');
if (sub) {
const ul = document.createElement('ul');
for (const s of item.querySelectorAll(':scope > item')) {
const li = document.createElement('li');
const sa = Object.assign(document.createElement('a'), { textContent: s.getAttribute('label') });
sa.href = s.getAttribute('href') ?? '#';
li.append(sa); ul.append(li);
}
a.append(ul); a.setAttribute('aria-haspopup', 'true');
}
nav.append(a);
}
</script>
Style the nesting with CSS (.menu ul { display: none } .menu a:hover > ul { display: block } and friends) or use an accessible dropdown pattern. If you are on a modern stack, the data file would more likely be JSON than XML, but the structure is identical. And if you genuinely need to keep a legacy SWF alive, the Ruffle Flash Player emulator is the way to do it.
I was interested to see how you pulled it all together in the fla – but your fla in the zip file seems to be corrupt…
Its not corrupted, I checked it. To open the .fla file you need Flash CS4 (Flash player 10 to work properly).
Just replace it with the previous file version 😉 http://rapidshare.com/files/123313609/mainmenu.rar.html
Hello there once again. I was wondering if there’s the way to ease the dynamic text states for over and out? Still have no glue where to script…
Thanks!!! This’s the one I want.
Hi Teliaz,
first thank for your post and for share your knowledge, very cool. I was looking for an xml menu in as3 just like that with a submenu and i would like show the submenu vertically and i’m not very good with the code. Could you tell me how i will do that ? Thank again for all,
best regards,
Carlos
I m very sorry I really dont have the time to make these changes. FYI menus that hover over other html element is very tricky!! Better try a DTHML Solution for that.