Sto provando a scrivere del codice per Safari per gestire l'evento "paste", ma non sembra funzionare correttamente. Secondo il riferimento DOM di WebKit, oncut
, onpaste
e oncopy
vengono gestiti più o meno come suggerisce l'API per appunti W3C. Tuttavia, non funziona come mi aspetto. Sto incollando i dati delle immagini, ma per quanto ne so, il problema che sto avendo riguarda qualsiasi tipo di incolla. Questo jsfiddle funziona bene in Chrome, ma non in Safari 6.0.4 su OSX.Safari gestisce correttamente l'evento Incolla?
$(function() {
console.log("ready");
$("#pastearea").on("paste", function (e) {
e.preventDefault();
console.debug("testing paste in safari");
var blob = e.originalEvent.clipboardData.items[0].getAsFile();
console.debug(blob);
var reader = new FileReader();
reader.onload = readerLoaded;
reader.readAsDataURL(blob);
});
});
function readerLoaded(e) {
$("#dest").attr("src", e.target.result);
}
ho provato di nuovo utilizzando solo plain JS. Ancora nessuna gioia:
<div id="pastearea" onpaste="plainjsOnPaste()" style="width: 100px; height: 100px; background-color: blue;"/>
function plainjsOnPaste(e) {
console.log("blahblahblah");
console.log(e);
}
Se c'è qualche problema con Safari, ovviamente non dovrei aspettarmi che jQuery funzioni. Per quanto posso dire, nel secondo tentativo (semplice) sto facendo esattamente quello che il riferimento WebKit suggerisce che dovrei fare, ma non funziona affatto. Si tratta di una limitazione nota di Safari o il problema tra la sedia e la tastiera?
Aggiornamento: sembra che Safari non implementa la bozza di lavoro del W3C delle API degli Appunti. Sto cercando soluzioni alternative, ma se qualcuno ne conosce una mi piacerebbe ascoltarla.
Sembra Safari ha bisogno di una sorta di area di input in cui è possibile fare accadere la pasta, l'uso di 'contentEditable = true' attiverà l'evento in Safari http://jsfiddle.net/RrP8X/ – Duopixel
@Duopixel perché un commento e non una risposta? Questa è una risposta perfettamente valida (ancora meglio se puoi citare una fonte per questo ...) –
Sarebbe anche preferibile farlo senza impostare contentEditable - questo ha alcuni effetti collaterali indesiderati, come mostrare un cursore textarea sul focus. –