Existem novas soluções para copiar vários grupos de texto para área de transferência via JavaScript / Flash, desde Flash 10?
-
22-07-2019 - |
Pergunta
Desde Flash 10 foi introduzido, muitos dos populares 'copiar para área de transferência' de scripts lá fora pararam de funcionar devido a novas restrições de segurança. Há um flash única solução aqui:
http: //cfruss.blogspot .com / 2009/01 / copy-to-clipboard-swf-button-cross.html
... embora eu estou procurando a capacidade de acionar a função de cópia via JS, em vez de depender o usuário a clicar em um objeto Flash para gatilho.
Para um exemplo do que empregam actualmente, consulte:
qualquer um dos links 'copiar' usar cópia do plugin jQuery aqui:
http://plugins.jquery.com/project/copy
UPDATE: OK, então eu tentei ZeroClipboard. À primeira vista, parecia ótimo. No entanto, a quantidade de código redundante necessário para permitir várias ligações prancheta é inaceitável . Em alguns casos, haverá mais de 40 ocorrências de texto que cada um tem seu próprio link 'cópia'. Ainda à procura de uma solução melhor ...
Solução
Isso é terrível notícia, eu não tinha sequer notado. I usar o truque do Flash extensivamente também. Tanto quanto eu sei que era a única maneira de obter cópia de trabalho sem ter que instalar algum outro plugin (além do flash onipresente) devido a preocupações de segurança do navegador.
Update: Depois de muito pânico, e algumas pesquisas no Google, eu tropecei em http: // código .google.com / p / zeroclipboard / que fornece um truque compatível flash 10 para obter a cópia de trabalho mais uma vez. Agora, para ir ao redor de atualizar sites ...
Outras dicas
Esta solução só funciona para as teclas digitadas que invocam a operação desejada. Ele funciona movendo o cursor do usuário em um elemento textarea antes que o usuário termina a tecla relevante. Ele só funciona para entrada de texto. Eu tenho esse trabalho no Firefox e Chrome. IE pode usar o objeto clipboardData (que é preferível a este hack).
Em seu lugar html você deve criar um elemento textarea com arbitrariamente grandes linhas e atributos cols. O ' clipboard-textarea ' elemento será a área de retenção para os dados colados e copiados. I ocultar o elemento utilizando alguns atributos de estilo.
O script:
var desiredClipboardContents = 'It works';
function onCopyKeyPressed() {
// The trick here is to populate the textarea with
// the text you want copied before the user releases
// the copy keystroke.
var textarea = document.getElementById('clipboard-textarea');
textarea.value = desiredClipboardContents;
textarea.focus();
textarea.select();
}
function onPasteKeyPressed() {
var textarea = document.getElementById('clipboard-textarea');
textarea.value = '';
textarea.focus();
// The trick here is to delay slurping the content
// that arrives in the textarea element until after
// the paste keystroke is completed. The 750 ms timeout
// provides the necessary delay.
setTimeout("finishedPasting", 750);
}
function finishedPasting() {
var textarea = document.getElementById('clipboard-textarea');
alert("Received from clipboard-paste: " + textarea.value);
}