6

I want to allow users to copy a large number of email addresses to their clipboard. This answer seemed like the most reliable way to do that:

How do I copy to the clipboard in JavaScript?

However, when testing I found that window.prompt() always replaces part of one of the emails with ....

Here is test data:

test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
test@test.com; test@test.com;test@test.com;test@test.com;test@test.com;
test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
test@test.com;test@test.com;

Here is example code with the following test data:

window.prompt ("To copy emails to clipboard, press: Ctrl+C, then Enter", 
  "test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
  test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
  test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
  test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
  test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
  test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
  test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
  test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
  test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
  test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
  test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
  test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
  test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
  test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
  test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
  test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
  test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
  test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
  test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
  test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
  test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
  test@test.com; test@test.com;test@test.com;test@test.com;test@test.com;
  test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
  test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
  test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
  test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
  test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
  test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
  test@test.com;test@test.com;test@test.com;test@test.com;test@test.com;
  test@test.com;test@test.com;");

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

Click on the link above, copy and paste the text to a text editor, and you will see that one of the emails (about halfway) becomes:

test@...om

Why is this happening?

Community
  • 1
  • 1
Nate
  • 22,356
  • 31
  • 115
  • 196

3 Answers3

8

The window.prompt() function is limited to 2000 characters in Chromium. If the input string exceeds this limit (your example has 2059 characters), the input string is cut in the middle marked with dots. This is called an ellipsis.

Here's a demonstration using exactly 2000 characters (I replaced the last three chars with XXX): http://jsfiddle.net/MkYDz/2/

;test@tesXXX");
Alex
  • 7,319
  • 1
  • 16
  • 34
8

The character limit for the prompt seems to be the reason like MVP said. There is a pretty better workaround for it. Use a textarea with the emails text as its content and use the select function to select the whole text in the textarea like you did with the prompt.

Example:

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

Assuming, you use jquery. If not you could use select function on the textarea DOM element.

var emailsTxtArea = document.getElementById(emailsToCopy);
emailsTxtArea.select();
emailsTxtArea.focus();
Jithesh
  • 934
  • 4
  • 10
2

If I had more reputation points I would comment on Jitesh's answer...

If you aren't using jquery, you can't do this:

emailsTxtArea.select().focus();

Instead you have to do this:

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

In regular javascript, the select method doesn't return the object.

bruceceng
  • 1,291
  • 12
  • 21