Retrieving JavaScript Browser Info from ActionScript

The example below shows how to retrieve JavaScript Browser info from ActionScript.

ActionScript (browser_info.swf)

import com.macromedia.javascript.*;
 
var proxy:JavaScriptProxy = new JavaScriptProxy(_root.lcId, this);
 
function getBrowserInfo():Void
{
	proxy.call("getBrowserInfo");
}
 
function getBrowserInfoReturn(browser:Object):Void
{
	//can get more info from System.capabilities
	for(var x:String in browser)
	{
		trace(x + " : " + browser[x]);
	}
}
 
getBrowserInfo();

HTML / JavaScript Page

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>browser_info</title>
    <script type="text/javascript" src="javascript/Exception.js"></script>
    <script type="text/javascript" src="javascript/FlashProxy.js"></script>
    <script type="text/javascript" src="javascript/FlashSerializer.js"></script>
    <script type="text/javascript" src="javascript/FlashTag.js"></script>
</head>
<body bgcolor="#ffffff">
 
 
<script type="text/javascript">
    
    function getBrowserInfo()
    {  
       var o = {};
       
       var type;
       for(var x in navigator)
       {
            type = typeof(navigator[x]);
       
            switch (type)
            {
                case 'function':
                {
                    //if it is a function, call it and keep its result
                    //o[x] = navigator[x]();
                    break;
                }
                case 'object':
                {
                    //one or more of the objects is causing a recursion error, 
                    //so right now, we just skip them
                    continue;
                    break;
                }
                default:
                {
                    //copy the property
                    o[x] = navigator[x];
                }                
            }
            
            var docElement = document.documentElement;
            
            o.href = location.href;
            o.pathName = location.pathname;
            o.baseURI = document.doctype.baseURI;
            o.lang = docElement.lang;
            o.offsetTop = docElement.offsetTop;
            o.offsetLeft = docElement.offsetLeft;
            o.offsetWidth = docElement.offsetWidth;
            o.offsetHeight = docElement.offsetHeight;
            o.scrollTop = docElement.scrollTop;
            o.scrollLeft = docElement.scrollLeft;
            o.scrollHeight = docElement.scrollHeight;
            o.scrollWidth - docElement.scrollWidth;
            o.clientHeight = docElement.clientHeight;
            o.clientWidth = docElement.clientWidth;
            o.width = document.width;
            o.height = document.height;
            o.domain = document.domain;
            o.lastModified = document.lastModified;
 
            var pluginArray = [];
            var plugins = navigator.plugins;
            var pluginLen = plugins.length;
            
            for(var i = 0; i < pluginLen; i++)
            {
                pluginArray.push(plugins[i].name);
            }
            
            o.plugins = pluginArray;
 
       }
       
       flashProxy.call("getBrowserInfoReturn", o);
    }
</script>    
    
<script type="text/javascript">    
    var uid = new Date().getTime();
    var flashProxy = new FlashProxy(uid, 'myFlashContent', 'JavaScriptFlashGateway.swf');
 
    var tag = new FlashTag('browser_info.swf', 550, 400, '7,0,14,0'); // last two arguments are height and width
    tag.addFlashVar('lcId', uid);
    tag.setId('myFlashContent');
    tag.write(document);
</script>
 
</body>
</html>