求各浏览器重写右键事件的javascript代码!该怎么处理

求各浏览器重写右键事件的javascript代码!
下面这个方法IE8、Chrome可以,火狐不行:

<body oncontextmenu="右键函数();"></body>



function 右键函数(ev){
ev = ev || window.event;             //获取事件对象
var elem = ev.srcElement||ev.target; //获取触发事件的对象
if (/\d+\|\d+/.test(elem.id)){       //如果id满足条件,执行代码
turned();
return false;
}
}


求优化,求其他浏览器的实现代码,火狐是重点。
------解决方案--------------------

<script type="text/javascript">
function turned(){
alert('turned');
}
function doit(ev){
    ev = getEvent();            //获取事件对象
    var elem = ev.srcElement
------解决方案--------------------
ev.target; //获取触发事件的对象
if(ev.button==2){
    if (/\d+\
------解决方案--------------------
\d+/.test(elem.id)){       //如果id满足条件,执行代码
        turned();
if(ev.stopPropagation) ev.stopPropagation();
else ev.cancelBubble = true;
        return false;
    }
}
}

function getEvent() {
    if (document.all) {
        return window.event; //for ie
    }
    func = getEvent.caller;
    while (func != null) {
        var arg0 = func.arguments[0];
        if (arg0) {
            if ((arg0.constructor == Event 
------解决方案--------------------
 arg0.constructor == MouseEvent) 
------解决方案--------------------
 (typeof (arg0) == "object" && arg0.preventDefault && arg0.stopPropagation)) {
                return arg0;
            }
        }
        func = func.caller;
    }
    return null;
}
window.onload = function(){
document.body.onmousedown = doit;
}
</script>

<div id="a1
------解决方案--------------------
2">xxxx</div>

------解决方案--------------------

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<style>
</style>
<script>
/**
 * 为需要设置的dom添加右键事件
 * @object el
 * 需要添加事件的dom对象
 * @function fun
 * 右键事件调用的方法
 */
function addContextmenu(el,fun){
    var tmpEvent=function(el){
      return function(event){
        event=event
------解决方案--------------------
window.event;
        if(event.button==2){
          fun(el,event);
        }
      }
    }
    try{
        el.addEventListener('mousedown',tmpEvent(el),true);
    }
    catch(ex){
        el.attachEvent('onmousedown',tmpEvent(el),true);
    }
}
/**
 * 随便定义一个右键事件方法,方法有两个参数,第一个参数为事件响应的dom对象,第二个为事件对象
 */
var testEvent=function(el,e){
  alert(el.innerHTML);
}
</script>
</head>

<body>
<div id='div1'>右键测试</div>
<script>
//效果:按照testEvent的内容,在"右键测试"上右击,弹出'右键测试'",方法自定义
addContextmenu(document.getElementById('div1'),testEvent);
//可以继续添加,下面的效果:右键点击"右键测试",弹出div的id,上面的效果后继续这个效果
addContextmenu(document.getElementById('div1'),function(el,e){alert(el.id)});
</script>
</body>
</html>

------解决方案--------------------
把  if(ev.stopPropagation) ev.stopPropagation();
            else ev.cancelBubble = true;
改成

  if(ev.preventDefault) ev.preventDefault();
            else ev.returnValue = false;

试试看,取消默认事件~
------解决方案--------------------