Chrome на Android — выделение текста одним нажатием и отображение кнопки копирования

#javascript #android #google-chrome #selection #copy-paste

Вопрос:

Я создаю веб-приложение на чистом JavaScript. Я бы хотел, чтобы пользователь мог выбрать весь абзац, когда он нажимает на него один раз в Chrome Android, и чтобы появилось контекстное меню «Копировать» Android, чтобы они могли легко скопировать текст, который они только что выбрали.

Я уже выделил весь абзац одним нажатием, без проблем, используя API выбора. Но меню «Копировать» не появляется при выборе текста. Почему нет, и как я могу заставить его отображаться в Chrome на Android?

Я создал JSFiddle, изолирующий мою проблему, которую вы можете открыть в Chrome Android, чтобы проверить. Вот код из него.

HTML:

 <p>Lorem ipsum</p>
<p>Dolorum est</p>
 

JavaScript:

 let selectedNode = undefined;

document.querySelectorAll("p").forEach(function (element) {
  element.addEventListener("click", function () {
    const selection = window.getSelection();
    selection.removeAllRanges();

    if (element === selectedNode) {
      selectedNode = undefined;
    } else {
      const range = document.createRange();
      range.selectNodeContents(element);
      selection.addRange(range); 

      selectedNode = element;
    }
  })
});
 

Когда я нажимаю на любой из абзацев, текст абзаца выделяется, но диалоговое окно копирования не появляется:

Текст выделен, кнопка копирования отсутствует

When I tap the paragraph again to DESELECT it (which essentially calls window.getSelection().removeAllRanges() , see the JavaScript above), THEN the Copy dialog comes up:

Text is deselected, copy button appears

I’m curious why this happens, but ultimately I’d like to know:

How can I get the Copy dialog to show up when the text is selected, rather than when it’s deselected?