Pergunta

Eu estou tentando escrever uma função JavaScript para editar o conteúdo da área de transferência antes de colar. Agora eu tenho evento ligado 'colar' para função através de JQuery.

$(this.elementDoc).bind('paste', function(event){
   self.OnPaste(event);
});

Mas isso não é importante. Agora eu gostaria de obter dados da área de transferência, mas eu não consigo descobrir como. Eu ficaria feliz para cada dica.

Foi útil?

Solução

Esta é uma toughie. Se bem me lembro, IE permite o acesso à área de transferência, mas por padrão o Firefox não faz por questões de segurança. Eu tive que fazer isso para um projeto que eu estava trabalhando, e foi forçado a usar um pequeno arquivo SWF que fez a cópia.

http://www.jeffothy.com/weblog/clipboard-copy/

Outras dicas

A lata clipboardData contém dados em vários formatos possíveis. Seu programa de um possível irá adicionar os dados da área de transferência em vários formatos. Para olhar através dos formatos, olhar através clipboardData.types.

Muitas vezes, os dados da área de transferência contém texto simples, e o primeiro tipo listado na types será o tipo MIME "text / plain". Se você copiar texto de um tho navegador, você verá dois tipos na lista: "text / plain" e "text / html". Dependendo de qual string que você passar para getData, você pode pegar o texto simples, ou o html. Parece que o "texto" é uma abreviação para "text / plain" e "url" é a abreviação de "/ uri-list text".

element.addEventListener('paste', function(event) {
  var cb = event.clipboardData
  if(cb.types.indexOf("text/html") != -1) {        // contains html
    var pastedContent = cb.getData("text/html")
  } else if(cb.types.indexOf("text/html") != -1) { // contains text
    var pastedContent = cb.getData("text/html")
  } else {
    var pastedContent = cb.getData(cb.types[0])    // get whatever it has
  }

  // do something with pastedContent
})

Para mais informações sobre como usar clipboardData.getData, consulte o feio spec.

Aqui está como obtê-lo a partir do IE ou do Chrome. Primeiro ele impede que a pasta real de acontecer, então ele faz uma verificação de recurso e, em seguida, define o texto variável para o texto da área de transferência. Com isso você pode manipular o texto e, em seguida, defini-lo como o valor para a entrada / elemento de seu colar, ou qualquer outra coisa que você quer fazer com ele.

//get clipboard text
event.preventDefault();
var text = null;
if (window.clipboardData) 
  text = window.clipboardData.getData("Text");
else if (event.originalEvent && event.originalEvent.clipboardData)
  text = event.originalEvent.clipboardData.getData("Text");

//manipulate the text
text = '..do stuff with it..';
//set the text
$(this).val(text);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top