Отключение контекстного меню при длинных нажатиях на Android
Я хотел бы отключить контекстное меню, которое появляется после долгого нажатия (touch и hold) на изображениях в моем веб-приложении. Я видел сообщения с разными идеями, как это сделать, но ни один из них, похоже, не работает для меня.
есть ли способ сделать это на Android через HTML/CSS/Javascript?
10 ответов
Это должно работать на 1.6 или более поздней версии (если я правильно помню). Я не верю, что есть обходной путь для 1.5 или раньше.
<!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>
контекстное меню имеет свое собственное событие. Вам просто нужно поймать его и остановить его распространение.
window.oncontextmenu = function(event) {
event.preventDefault();
event.stopPropagation();
return false;
};
для меня поглощение всех событий не было вариантом, так как я хотел отключить длительное нажатие загрузки, все еще позволяя пользователю масштабировать и панорамировать изображение. Я смог решить это с помощью css и html только путем наложения" щита " div поверх изображения следующим образом:
<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;
}
надеюсь, это кому-то поможет!
Я использую полный пример Nurik, но элемент (входное изображение на моей странице)был отключен для щелчка.
Я меняю исходную строку следующим образом:
исходная строка:
node.ontouchstart = absorbEvent_;
мои изменения:
node.ontouchstart = node.onclick;
С помощью этого приложения я отключаю всплывающее меню "Сохранить Изображение" на logpress, но сохраняю событие click.
Im тестирование на 7-дюймовом планшете с Android 2.2 под браузером Dolphin HD и отлично работает!
Это можно сделать использование CSS:
img {
pointer-events: none;
}
используйте этот CSS коды для мобильных
-webkit-touch-callout: none;
-webkit-user-select: none; /* Disable selection/copy in UIWebView */
pointer-events: none; // for Android
-webkit-touch-callout: none; // for iOS
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
<a id="moo" href=''> </a>
<script type="text/javascript">
var moo = document.getElementById('moo');
function handler(event) {
event = event || context_menu.event;
if (event.stopPropagation)
event.stopPropagation();
event.cancelBubble = true;
return false;
}
moo.innerHTML = 'right-click here';
moo.onclick = handler;
moo.onmousedown = handler;
moo.onmouseup = handler;
</script>
захват события onContextMenu и возврат false в обработчике событий.
вы также можете захватить событие click и проверить, какая кнопка мыши запустила событие с событием.button, в некоторых браузерах в любом случае.
просто была аналогичная проблема. Вышеуказанные предложения не работали для меня в браузере Andoid, но я обнаружил, что отображение проблемного изображения в качестве фонового изображения CSS, а не встроенного изображения исправило проблему.
через raw javascript нет событий, которые вызываются для контекстного меню. Возможно, в мире Java что-то есть... На самом деле существует несколько проблем, связанных с событиями javascript (например, фокус не работает правильно) в Android webkit.