2015-02-19 3 views
19

В веб-приложении мне нужно отключить выноску по умолчанию, отображаемое мобильными браузерами при касании и удержании («длинный кран») на целевом объекте, например <img> или ссылку.Отключить выноску (контекстное меню) на Android

Я уже пользуюсь -webkit-touch-callout: none;, который отлично работает на iPhone и iPad, но, похоже, не работает на Android (протестирован на Android 4.4).

This post из списка рассылки W3 предлагает добавить слушателя к событию «contextmenu» в Javascript и вызвать e.preventDefault(). Это тоже не работает.

Любые предложения?

ответ

4

Вы можете попробовать сделать это:

window.oncontextmenu = function(event) { 
    event.preventDefault(); 
    event.stopPropagation(); 
    return false; 
}; 

Я надеюсь, что это полезно ...

Doc oncontextmenu

+0

Как указано в моем вопросе, я уже пробовал это, и он не работает. – Grodriguez

+0

Вы не говорили о stopPropagation. – Zagonine

+0

Какая разница в этом контексте? Я пытаюсь предотвратить действие браузера по умолчанию, а не препятствовать тому, чтобы событие разбухало. – Grodriguez

0


 

 
<!DOCTYPE html> 
 
    <html> 
 
    <head> 
 
     <script> 
 
     function absorbEvent_(event) { 
 
      var e = event || window.event; 
 
      e.preventDefault && e.preventDefault(); 
 
      e.stopPropagation && e.stopPropagation(); 
 
      e.cancelBubble = true; 
 
      e.returnValue = false; 
 
      return false; 
 
     } 
 
    
 
     function preventLongPressMenu(node) { 
 
      node.ontouchstart = absorbEvent_; 
 
      node.ontouchmove = absorbEvent_; 
 
      node.ontouchend = absorbEvent_; 
 
      node.ontouchcancel = absorbEvent_; 
 
     } 
 
    
 
     function init() { 
 
      preventLongPressMenu(document.getElementById('doodle')); 
 
     } 
 
     </script> 
 
    </head> 
 
    <body onload="init()"> 
 
     <img id="doodle" src="http://www.google.com/logos/doodles/2015/spain-elections-2015-5652792221892608-hp2x.jpg" width="400"> 
 
    </body> 
 
    </html>
Она должна быть работа на 1.6 (Donut " ") или выше. надеюсь, это поможет.

+1

Это отключает все события. Мне нужно отключить контекстные меню на целевых объектах, но они все равно должны быть осязаемыми. – Grodriguez

Смежные вопросы