Подтвердить что ты не робот

Отключение контекстного меню на длинных нажатиях на Android

Я хотел бы отключить контекстное меню, появившееся после длинного нажатия (коснуться и удерживать) на изображениях в моем веб-приложении. Я видел сообщения с разными идеями, как это сделать, но никто из них, похоже, не работает для меня.

Есть ли способ сделать это на Android через HTML/CSS/Javascript?

4b9b3361

Ответ 1

Это должно работать на 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>

Ответ 2

Контекстное меню имеет свое собственное событие. Вам просто нужно поймать его и остановить его от распространения.

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

Ответ 3

Для меня поглощение всех событий не было вариантом, так как я хотел отключить длительные загрузки, в то же время позволяя пользователю увеличивать и панорамировать изображение. Я смог решить это с помощью 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;
}

Надеюсь, это поможет кому-то!

Ответ 4

Я использую полный пример Nurik, но элемент (входное изображение на моей странице) был отключен и для щелчка.

Я меняю исходную строку следующим образом:

исходная строка:

node.ontouchstart = absorbEvent_;

мое изменение:

node.ontouchstart = node.onclick;

с этим подходом я отключить всплывающее меню сохранения изображений в журнале, но сохранить событие click.

Я тестирую 7-дюймовый планшет с Android 2.2 под браузером Dolphin HD и отлично работает!

Ответ 6

Используйте эти коды CSS для мобильных устройств

-webkit-touch-callout: none;
-webkit-user-select: none; /* Disable selection/copy in UIWebView */

Ответ 7

<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 в обработчик события.

Вы также можете зафиксировать событие клика и проверить, какая кнопка мыши запускает событие с помощью event.button, в некоторых браузерах.

Ответ 8

У нас была аналогичная проблема. Вышеуказанные предложения не работали для меня в браузере Andoid, но я обнаружил, что отображение проблемного изображения в качестве фонового изображения CSS, а не встроенного изображения устраняет проблему.

Ответ 9

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;

Ответ 10

У меня была похожая проблема. Я пробовал пару решений из этой темы и другую тему для сафари по той же проблеме (Предотвращение контекстного меню по умолчанию при длинном нажатии/длинном клике в мобильном Safari (iPad/iPhone)). Плохо то, что я не мог использовать onTouchStart, onTouchEnd и т.д.

Только предотвратить событие от onContextMenu. Фрагмент из React 16.5.2. Испытано только в Chrome.

    <img {...props} onContextMenu={event => event.preventDefault()}
    onTouchStart={touchStart}
    onTouchEnd={touchEnd} />

Ответ 11

Это отключит копирование, но не отключит выбор.

document.oncontextmenu = function() {return false;};

Работает в webView.

Ответ 12

С помощью встроенного javascript нет событий, вызываемых для контекстного меню. Возможно, в мире Java есть что-то... На веб-сайте Android есть несколько проблем, связанных с событиями javascript (например, фокус не работает).