Копия / Помещенный текст на буфере обмена с FireFox, Safari и Chrome

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

111
задан Kaiido 9 March 2019 в 12:10
поделиться

9 ответов

Я должен сказать что ни одно из этих решений действительно работа. Я попробовал решение для буфера обмена из принятого ответа, и это не работает с Flash Player 10. Я также попробовал ZeroClipboard, и я был очень доволен им некоторое время.

я в настоящее время использую его на своем собственном сайте ( http://www.blogtrog.com ), но я замечал странные ошибки с ним. Путем ZeroClipboard работает, то, что он помещает невидимый объект флэш-памяти поверх элемента на Вашей странице. Я нашел, что, если мой элемент перемещается (как то, когда пользователь изменяет размер окна и мне выровняли по правому краю вещи), объект флэш-памяти ZeroClipboard добирается в неисправном состоянии и больше не покрывает объект. Я подозреваю, что это, вероятно, все еще находится, где это было первоначально. У них есть код, это, как предполагается, останавливает это или повторно прикрепляет его к элементу, но это, кажется, не работает хорошо.

Так... в следующей версии BlogTrog, я предполагаю, что буду следовать примеру со всеми другими маркерами кода, которые я досмотрел до конца в дикой природе и удаляю свою Копию к кнопке Clipboard. :-(

(я заметил, что Копия dp.syntaxhiglighter к Буферу обмена повреждается теперь также.)

4
ответ дан Dave Haynes 24 November 2019 в 03:05
поделиться

copyIntoClipboard () функционируют работы для Flash 9, но это, кажется, повреждается выпуском Flash player 10. Вот решение, которое действительно работает с новым Flash player:

http://bowser.macminicolo.net/~jhuckaby/zeroclipboard/

Это - сложное решение, но это действительно работает.

5
ответ дан Andomar 24 November 2019 в 03:05
поделиться

Firefox действительно позволяет Вам хранить данные в буфере обмена, но из-за последствий безопасности это отключено по умолчанию. Посмотрите, как включить его в "Предоставляющий доступ JavaScript к буферу обмена" в базе знаний Mozilla Firefox.

решение, предлагаемое amdfan, является лучшим, если Вы имеете много пользователей и настраиваете их браузер, не опция. Хотя Вы могли протестировать, если буфер обмена доступен, и предоставьте ссылку для изменения настроек, если пользователи технически подкованы. Редактор JavaScript TinyMCE следует за этим подходом.

8
ответ дан Troels Thomsen 24 November 2019 в 03:05
поделиться

Из соображений безопасности Firefox не позволяет Вам помещать текст в буфер обмена. Однако существует обходное решение доступный Flash использования.

function copyIntoClipboard(text) {

    var flashId = 'flashId-HKxmj5';

    /* Replace this with your clipboard.swf location */
    var clipboardSWF = 'http://appengine.bravo9.com/copy-into-clipboard/clipboard.swf';

    if(!document.getElementById(flashId)) {
        var div = document.createElement('div');
        div.id = flashId;
        document.body.appendChild(div);
    }
    document.getElementById(flashId).innerHTML = '';
    var content = '<embed src="' + 
        clipboardSWF +
        '" FlashVars="clipboard=' + encodeURIComponent(text) +
        '" width="0" height="0" type="application/x-shockwave-flash"></embed>';
    document.getElementById(flashId).innerHTML = content;
}

единственный недостаток - то, что это требует, чтобы Flash был включен.

источник в настоящее время мертв: http://bravo9.com/journal/copying-text-into-the-clipboard-with-javascript-in-firefox-safari-ie-opera-292559a2-cc6c-4ebf-9724-d23e8bc5ad8a/ (и так, это кэш Google )

50
ответ дан gcb 24 November 2019 в 03:05
поделиться

Создавая от превосходного ответа из @David от Студии 201, это работает в Safari, FF и Chrome. Это также гарантирует, что никакое высвечивание не могло произойти от textarea путем размещения его вне экрана.

// ================================================================================
// ClipboardClass
// ================================================================================
var ClipboardClass = (function() {


   function copyText(text) {
    // Create temp element off-screen to hold text.
        var tempElem = $('<textarea style="position: absolute; top: -8888px; left: -8888px">');
        $("body").append(tempElem);

        tempElem.val(text).select();
        document.execCommand("copy");
        tempElem.remove();
   }


    // ============================================================================
   // Class API
   // ============================================================================
    return {
        copyText: copyText
    };
})();
1
ответ дан 24 November 2019 в 03:05
поделиться

Электронные таблицы перехватывают события Ctrl + C, Ctrl + V и переносят фокус на скрытый элемент управления TextArea и либо устанавливают его содержимое на желаемое новое содержимое буфера обмена для копирования, либо читают его содержимое после завершения события для вставки.

см. также Можно ли читать буфер обмена в Firefox, Safari и Chrome с помощью Javascript?

13
ответ дан 24 November 2019 в 03:05
поделиться

A slight improvement on the Flash solution is to detect for flash 10 using swfobject:

http://code.google.com/p/swfobject/

and then if it shows as flash 10, try loading a Shockwave object using javascript. Shockwave can read/write to the clipboard(in all versions) as well using the copyToClipboard() command in lingo.

1
ответ дан 24 November 2019 в 03:05
поделиться

http://www.rodsdot.com/ee/cross_browser_clipboard_copy_with_pop_over_message.asp работает с Flash 10 и всеми браузерами с поддержкой Flash.

Также ZeroClipboard был обновлен, чтобы избежать упомянутой ошибки, когда прокрутка страницы приводит к тому, что Flash-ролик больше не находится в нужном месте.

Поскольку этот метод "требует", чтобы пользователь нажал кнопку для копирования, это удобство для пользователя и ничего плохого не происходит.

1
ответ дан 24 November 2019 в 03:05
поделиться

Я использовал Clippy от Github для своих нужд, простая кнопка на основе Flash. Работает просто отлично, если не нужен стайлинг и устраивает вставка что вставить на стороне сервера заранее.

2
ответ дан 24 November 2019 в 03:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: