Disabling the context menu on long taps on Android
The context menu has its own event. You just need to catch it and stop it from propagating.
window.oncontextmenu = function(event) { event.preventDefault(); event.stopPropagation(); return false;};
This should work on 1.6 or later (if I recall correctly). I don't believe there's a workaround for 1.5 or earlier.
<!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('theimage')); } </script></head><body onload="init()"> <img id="theimage" src="http://www.google.com/logos/arthurboyd2010-hp.jpg" width="400"></body></html>
For me, absorbing all the events was not an option since I wanted to disable long press downloads while still allowing the user to zoom and pan on the image. I was able to solve this with css and html only by layering a "shield" div on top of the image like so:
<div class="img-container"> <div class="shield"></div> <img src="path.jpg"></div>img { max-width: 100%;}.shield { position: absolute; top: 0; right: 0; bottom: 0; left: 0; z-index: 1;}
Hope this helps someone!