Очень интересная задачка для джаваскриптизёров 
 
Итак, по-порядку:
1) суть - нужно скопировать текст из браузера в буфер обмена по нажатию на кнопку;
естественно, задача в некотором смысле дикая, так как браузеры не должны были взаимодействовать с ОС, но... так случилось, и теперь заказчики очень хотят иметь в себя такую фичу;
2) некоторые люди к прелестной библиотеке DataTables - 
http://www.datatables.net/download/  добавили поддержку ZeroClipboard, дабы можно было копировать в буфер выбранные строки, столбцы и т.п. - 
https://cdn.datatables.net/tabletools/2.0.3/. Кнопки, привязанные к таблице, работают на ура.
3) Но вот теперь надо сделать отдельную кнопку, которая не привязана к таблице и должна скопировать текст из обычного textarea. Хотелось бы воспользоваться уже тем, что имеется (TableTools с той последней ссылки) и не добавлять в проект отдельно библиотеку ZeroClipboard.js, её флеш-файл, дописывать в зависимости и т.п. Но, вот здесь и начались проблемы.
Вот макет того, что должно быть в реальности, но этот макет почему-то ещё хуже чем аналогичный код в реальном проекте.
3.1) table_zero.html
<html>
    <head>
        <title>Sergius' Sandbox</title>
        <script src="jquery-1.9.1.min.js"></script>
        <script src="jquery.dataTables.min.js"></script>
        <script src="TableTools.min.js"></script>
        <script src="table_zero.js"></script>
    </head>
 
    <body>
        <input type="button" id="show_text" value="Show Text"></input>
        <div>
        <textarea id="text_holder"></textarea>
        </div>
    </body>
</html>
3.2)  table_zero.js
function show_text(){
    $('#text_holder').toggle();
    if ($('#show_text').val() == 'Show Text'){
        $('#show_text').val('Hide Text');
        // copy to clipboard
        ZeroClipboard_TableTools.setMoviePath('copy_csv_xls.swf');
        var clip = new ZeroClipboard_TableTools.Client();
        clip.glue("show_text", "copy");
        clip.setText($("#text_holder").val());
    }
    else {
        $('#show_text').val('Show Text');
    }
}
 
document.ready = function(){
    $('#show_text').click(show_text);
    $('#text_holder').val('Hello world');
    $('#text_holder').hide();
}
Лишь таким образом мне удалось заставить его работать (в реальном проекте), но здесь же очевидно, что событие привязывается после первого нажимания на кнопку и копирует лишь со второго раза, когда textarea уже прятается. Когда же я пытался вынести это в document.ready или на начало обработки события - ничего не работало. Пытался также передавать clip как аргумент функции - никаких результатов. И что удивительно, firebug не показывает никаких ошибок.
Вот, собственно, вопросы:
1) что здесь не так?
2) можно ли его всё же заставить работать? или придётся использовать чистый ZeroClipboard?
3) пробовал вариант из 
https://developers.google.com/web/up...-copy-commands, но он не у всех поддерживается, а флеш работает почти везде, даже на очень старых виртуалках из старыми браузерами и т.п. Поэтому, вряд ли имеется ещё какой-то путь...