Текст, переданный в window.prompt, заменяется на "..."

Я хочу разрешить пользователям копировать большое количество адресов электронной почты в буфер обмена. Этот ответ казался самым надежным способом сделать это:

Как скопировать в буфер обмена в JavaScript?

Однако при тестировании я обнаружил, что window.prompt() всегда заменяет часть одного из сообщений электронной почты ....

Вот тестовые данные:

[email protected];[email protected];[email protected];[email protected];[email protected];
[email protected];[email protected];[email protected];[email protected];[email protected];
[email protected];[email protected];[email protected];[email protected];[email protected];
[email protected];[email protected];[email protected];[email protected];[email protected];
[email protected];[email protected];[email protected];[email protected];[email protected];
[email protected];[email protected];[email protected];[email protected];[email protected];
[email protected];[email protected];[email protected];[email protected];[email protected];
[email protected];[email protected];[email protected];[email protected];[email protected];
[email protected];[email protected];[email protected];[email protected];[email protected];
[email protected];[email protected];[email protected];[email protected];[email protected];
[email protected];[email protected];[email protected];[email protected];[email protected];
[email protected];[email protected];[email protected];[email protected];[email protected];
[email protected];[email protected];te[email protected];[email protected];[email protected];
[email protected];[email protected];[email protected];[email protected];[email protected];
[email protected];[email protected];[email protected];[email protected];[email protected];
[email protected];[email protected];[email protected];[email protected];[email protected];
[email protected];[email protected];[email protected];[email protected];[email protected];
[email protected];[email protected];[email protected];[email protected];[email protected];
[email protected];[email protected];[email protected];[email protected];[email protected];
[email protected];[email protected];[email protected];[email protected];[email protected];
[email protected];[email protected];[email protected];[email protected];[email protected];
[email protected]; [email protected];[email protected];[email protected];[email protected];
[email protected];[email protected];[email protected];[email protected];[email protected];
[email protected];[email protected];[email protected];[email protected];[email protected];
[email protected];[email protected];[email protected];[email protected];[email protected];
[email protected];[email protected];[email protected];[email protected];[email protected];
[email protected];[email protected];[email protected];[email protected];[email protected];
[email protected];[email protected];[email protected];[email protected];[email protected];
[email protected];[email protected];[email protected];[email protected];[email protected];
[email protected];[email protected];

Вот пример кода со следующими тестовыми данными:

window.prompt ("To copy emails to clipboard, press: Ctrl+C, then Enter", 
  "[email protected];[email protected];[email protected];[email protected];[email protected];
  [email protected];[email protected];[email protected];[email protected];[email protected];
  [email protected];[email protected];[email protected];[email protected];[email protected];
  [email protected];[email protected];[email protected];[email protected];[email protected];
  [email protected];[email protected];[email protected];[email protected];[email protected];
  [email protected];[email protected];[email protected];[email protected];[email protected];
  [email protected];[email protected];[email protected];[email protected];[email protected];
  [email protected];[email protected];[email protected];[email protected];[email protected];
  [email protected];[email protected];[email protected];[email protected];[email protected];
  [email protected];[email protected];[email protected];[email protected];[email protected];
  [email protected];[email protected];[email protected];[email protected];[email protected];
  [email protected];[email protected];[email protected];[email protected];[email protected];
  [email protected];[email protected];[email protected];[email protected];[email protected];
  [email protected];[email protected];[email protected];[email protected];[email protected];
  [email protected];[email protected];[email protected];[email protected];[email protected];
  [email protected];[email protected];[email protected];[email protected];[email protected];
  [email protected];[email protected];[email protected];[email protected];[email protected];
  [email protected];[email protected];[email protected];[email protected];[email protected];
  [email protected];[email protected];[email protected];[email protected];[email protected];
  [email protected];[email protected];[email protected];[email protected];[email protected];
  [email protected];[email protected];[email protected];[email protected];[email protected];
  [email protected]; [email protected];[email protected];[email protected];[email protected];
  [email protected];[email protected];[email protected];[email protected];[email protected];
  [email protected];[email protected];[email protected];[email protected];[email protected];
  [email protected];[email protected];[email protected];[email protected];[email protected];
  [email protected];[email protected];[email protected];[email protected];[email protected];
  [email protected];[email protected];[email protected];[email protected];[email protected];
  [email protected];[email protected];[email protected];[email protected];[email protected];
  [email protected];[email protected];[email protected];[email protected];[email protected];
  [email protected];[email protected];");

JSFiddle: http://jsfiddle.net/MkYDz/

Нажмите на ссылку выше, скопируйте и вставьте текст в текстовый редактор, и вы увидите, что одно из писем (примерно на полпути) становится:

[email protected]

Почему это происходит?

Ответы

Ответ 1

Предел символов для подсказки, по-видимому, является причиной, подобной MVP. Для этого есть более подходящее решение. Используйте textarea с текстом электронной почты в качестве своего содержимого и используйте функцию select, чтобы выбрать весь текст в текстовом поле, как вы сделали с подсказкой.

Пример:

$('#container').append('To copy emails to clipboard, press: Ctrl+C, then Enter <br />
<textarea id="emailsToCopy">'+emailsToCopy+'</textarea>');
$('#emailsToCopy').select().focus();

Предполагая, вы используете jquery. Если нет, вы можете использовать функцию select для элемента DOM textarea.

var emailsTxtArea = document.getElementById(emailsToCopy);
emailsTxtArea.select();
emailsTxtArea.focus();

Ответ 2

Функция window.prompt() ограничена 2000 символами в Chromium. Если входная строка превышает этот предел (ваш пример имеет 2059 символов), строка ввода вырезается в середине, отмеченной точками. Это называется ellipsis.

Здесь демонстрация с использованием ровно 2000 символов (я заменил последние три символа на XXX): http://jsfiddle.net/MkYDz/2/

;[email protected]");

Ответ 3

Если бы у меня было больше очков репутации, я бы прокомментировал ответ Jitesh...

Если вы не используете jquery, вы не можете этого сделать:

emailsTxtArea.select().focus();

Вместо этого вы должны сделать это:

emailsTxtArea.select();
emailsTxtArea.focus();

В обычном javascript метод select не возвращает объект.