项目中有用到右键菜单,故用了@contextmenu,由于本人是用的PC电脑,所以一切正常,
但是有同事用mac测试了一下,问题随之而来,MAC上右键按下就触发了,
PC上面是鼠标抬起才会触发,所以这样就导致了问题的出现,因为我在方法里面再给document上注册了一个鼠标抬起隐藏右键菜单。
所以在PC上一切正常,但是MAC上面右键菜单只要抬起鼠标就隐藏了。
问题找到了
那么怎么解决呢?
目前也没有很好的思路
就先判断是否是MAC电脑,如果是,就把mouseup事件换成click,click的体验没有mouseup好,反正mac是小众用户群体,先不影响使用吧。
1 if (detectOS() == "Mac") { 2 $(document).click(function(e) { 3 destroyedMenuRightClick(); 4 }); 5 } else { 6 $(document).mouseup(function(e) { 7 destroyedMenuRightClick(); 8 }); 9 }
1 function detectOS() { 2 var sUserAgent = navigator.userAgent; 3 var isWin = 4 navigator.platform == "Win32" || navigator.platform == "Windows"; 5 var isMac = 6 navigator.platform == "Mac68K" || 7 navigator.platform == "MacPPC" || 8 navigator.platform == "Macintosh" || 9 navigator.platform == "MacIntel"; 10 if (isMac) return "Mac"; 11 var isUnix = navigator.platform == "X11" && !isWin && !isMac; 12 if (isUnix) return "Unix"; 13 var isLinux = String(navigator.platform).indexOf("Linux") > -1; 14 var bIsAndroid = sUserAgent.toLowerCase().match(/android/i) == "android"; 15 if (isLinux) { 16 if (bIsAndroid) return "Android"; 17 else return "Linux"; 18 } 19 if (isWin) { 20 var isWin2K = 21 sUserAgent.indexOf("Windows NT 5.0") > -1 || 22 sUserAgent.indexOf("Windows 2000") > -1; 23 if (isWin2K) return "Win2000"; 24 var isWinXP = 25 sUserAgent.indexOf("Windows NT 5.1") > -1 || 26 sUserAgent.indexOf("Windows XP") > -1; 27 if (isWinXP) return "WinXP"; 28 var isWin2003 = 29 sUserAgent.indexOf("Windows NT 5.2") > -1 || 30 sUserAgent.indexOf("Windows 2003") > -1; 31 if (isWin2003) return "Win2003"; 32 var isWinVista = 33 sUserAgent.indexOf("Windows NT 6.0") > -1 || 34 sUserAgent.indexOf("Windows Vista") > -1; 35 if (isWinVista) return "WinVista"; 36 var isWin7 = 37 sUserAgent.indexOf("Windows NT 6.1") > -1 || 38 sUserAgent.indexOf("Windows 7") > -1; 39 if (isWin7) return "Win7"; 40 } 41 return "other"; 42 }