Not just Actionscript noodlings


27 Nov

SWFMacMouseWheel IE Problem


Recently came across a problem with Internet Explorer and SWFMacMouseWheel.

the error was

Message: 'swfmacmousewheel' is null or not an object

It turns out it was a common error and has been fixed in the latest version, which is below.

/**
 * SWFMacMouseWheel v2.0: Mac Mouse Wheel functionality in flash - http://blog.pixelbreaker.com/
 *
 * SWFMacMouseWheel is (c) 2007 Gabriel Bucknall and is released under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 * Modded by Robert M. Hall - rhall@impossibilities.com 
 * Adjusted following functionality:
 * 1. Watch for events related only to flash content and not the container page
 * 2. Fixed to dispatch mousewheel events only to specific intance ID's that were registered, this
 *    allows multiple SWFobject embeds on a page to use swfmacmousewheel and they will only respond
 *    to their specific target ID's when the event.target.is passed. This way only the currently active item will receive a dispatch event.
 * 3. Works with SWFObject 2.1
 * 4. No longer throws an error on IE/PC platforms because of a null object
 * 5. Works on Safari for PC
 *
 * Dependencies: 
 * SWFObject v2.1 <http://code.google.com/p/swfobject/>
 * Copyright (c) 2007 Geoff Stearns, Michael Williams, and Bobby van der Sluis
 * This software is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
 *
 * Requires a few lines of changes to the AS2 and AS3 code to support the PC version of Safari
 * as well as an additional Flashvar paramater, set flashvars.browser = Browser.name;
 * These changes are only required for Safari on PC - all other modifications noted above are contained solely in this JavaScript
 * Safari PC support based on code/suggestions from Richard "RaillKill" Rodney of Hypermedia - http://railkill.free.fr/
 *
 * Browser detect part from http://www.quirksmode.org/js/detect.html
 *
 */
 
var Browser = { init:function() {
this.name = this.searchString(this.dataBrowser) || "unknown" },
	searchString:function(data){
	for(var A=0;A<data.length;A++){ 
	var B=data[A].string;
	var C=data[A].prop;
	this.versionSearchString=data[A].versionSearch || data[A].identity;
	if(B){
		if(B.indexOf(data[A].subString)!=-1){ 
			return data[A].identity
			}
		} else if (C) {
				return data[A].identity 
					}
			}
		},
		dataBrowser:[
			{
				string:navigator.vendor,
				subString:"Apple",
				identity:"Safari"
			}]};
 
Browser.init();
 
var swfmacmousewheel = function(){
			if(!swfobject)return null;
 
			var u=navigator.userAgent.toLowerCase();
			var p=navigator.platform.toLowerCase();
 
			var d=p?/mac/.test(p):/mac/.test(u);
			// alert(Browser.name);
			if( Browser.name != "Safari" && !d) return { registerObject:function() {} };
 
		var k = [];
 
		var r = function(event){
			var o=0;
			if(event.wheelDelta){
			o=event.wheelDelta/120;
			if(window.opera)o= -o;
			if(Browser.name=="Safari")o=o*3;}
				else if(event.detail) { o= -event.detail;
			}
				if(event.preventDefault) { 
				event.preventDefault(); }
			return o;
		};
 
		var __wheel = function(event){
 
			if(event.target.id == "" || event.target.id == undefined) {
				return; 
			} else {
				var o = r(event);
				var c;
				var tmpI = null;
				for(var i=0;i<k.length;i++){
				c = swfobject.getObjectById(k[i]);
					if(typeof(c.externalMouseEvent) == 'function' && event.target.id == k[i]) {
						tmpI=i;
					}
				}
				if(tmpI !=null) {
				c = swfobject.getObjectById(k[tmpI]);
				c.externalMouseEvent(o);	
				} else {
				window.scrollBy(0,-o);
				}
 
 
			}
		};
 
		return{ 
			registerObject:function(m)
			{
				k.push(m);
				if(window.addEventListener)window.addEventListener('DOMMouseScroll',__wheel,false);
				window.onmousewheel = document.onmousewheel = __wheel;
			}
		};
}();

25 Nov

Simple Actionscript Class setup


The simplest start to an Actionscript class

package
{
	import flash.display.Sprite;
 
	public class ClassName extends Sprite
	{
		public function ClassName ()
		{
			init();
		}
 
		private function init():void
		{
			trace("init");
		}
	}
}