「貼り付け」イベントを処理するための Safari 用のコードを書き込もうとしていますが、正しく動作しないようです。WebKit DOM リファレンスによると、oncut
、onpaste
、およびoncopy
はすべて、多かれ少なかれ W3C クリップボード API が示唆するように処理されます。ただし、期待どおりには機能しません。画像データを貼り付けていますが、私が知る限り、問題はどの種類の貼り付けにも当てはまります。このjsfiddleは Chrome では問題なく動作しますが、OSX の Safari 6.0.4 では動作しません。
$(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);
}
単純な JSだけを使用して再試行しました。まだ喜びはありません:
<div id="pastearea" onpaste="plainjsOnPaste()" style="width: 100px; height: 100px; background-color: blue;"/>
function plainjsOnPaste(e) {
console.log("blahblahblah");
console.log(e);
}
Safari に何らかの問題がある場合、明らかに jQuery が機能するとは期待できません。私が知る限り、2 回目の試行 (プレーン) では、WebKit のリファレンスで推奨されていることを正確に実行していますが、まったく機能しません。これは Safari の既知の制限ですか、それとも椅子とキーボードの間の問題ですか?
更新: Safari は、クリップボード API の W3C のワーキング ドラフトを実装していないようです。回避策を調べているのですが、ご存知の方がいらっしゃいましたら教えていただきたいです。