/* * Author:walktree walktree at gmail dot com * http://www.fluidea.cn/blog * * Thanks for the the js script from http://www.uza.lt/rightclick/ * * * Worked in IE 7,FF 3 and Google Chrome * * * useage: * //------------------------------------------------------------ * import org.fluidea.utils.RightClick; * * RightClick.init( yourCallBack ); * * //------------------------------------------------------------- * * That's all * */ package org.fluidea.utils { import flash.external.ExternalInterface; import flash.utils.setTimeout; public class RightClick { public static function init( callback:Function = null ):void { //check first if(!ExternalInterface.available) { //if not in webpage, do nothing return; } var swfID:String = ExternalInterface.objectID; ExternalInterface.call("eval", 'var swfobj = document.getElementById("' + swfID + '");var parentID;if(swfobj.parentElement == undefined){parentID = swfobj.parentNode.id;}else{parentID = swfobj.parentElement.id;}'); ExternalInterface.call("eval",'var RightClick = { init: function () {this.FlashObjectID = "'+swfID+'";this.FlashContainerID = parentID; this.Cache = this.FlashObjectID;if(window.addEventListener) {window.addEventListener("mousedown", this.onGeckoMouse(), true);}else {document.getElementById(this.FlashContainerID).onmouseup = function() { document.getElementById(RightClick.FlashContainerID).releaseCapture(); }, document.oncontextmenu = function(){ if(window.event.srcElement.id == RightClick.FlashObjectID) { return false; } else { RightClick.Cache = "nan"; }},document.getElementById(this.FlashContainerID).onmousedown = RightClick.onIEMouse; } },onGeckoMouse: function(ev) { return function(ev) { if (ev.button == 2) {RightClick.killEvents(ev);if(ev.target.id == RightClick.FlashObjectID && RightClick.Cache == RightClick.FlashObjectID) {;RightClick.call();}RightClick.Cache = ev.target.id;} }},killEvents: function(eventObject) { if(eventObject) {if (eventObject.stopPropagation) eventObject.stopPropagation(); if (eventObject.preventDefault) eventObject.preventDefault(); if (eventObject.preventCapture) eventObject.preventCapture();if (eventObject.preventBubble) eventObject.preventBubble();}},onIEMouse: function() { if (event.button == 2) {if(window.event.srcElement.id == RightClick.FlashObjectID && RightClick.Cache == RightClick.FlashObjectID) { RightClick.call(); } document.getElementById(RightClick.FlashContainerID).setCapture(); if(window.event.srcElement.id) RightClick.Cache = window.event.srcElement.id; }},call: function() {document.getElementById(this.FlashObjectID).rightClick(); }}'); // in some browsers, "eval" processing is so so so slow setTimeout(fixBug, 108,callback); /* ExternalInterface.call("RightClick.init"); ExternalInterface.addCallback("rightClick", function() { if ( func != null ) func(); } ); */ } private static function fixBug( func:Function ):void { ExternalInterface.call("RightClick.init"); ExternalInterface.addCallback("rightClick", function() { if ( func != null ) func(); } ); } } }