javascript - Safari 是否正确处理了粘贴事件?

标签 javascript safari dom-events

我正在尝试为 Safari 编写一些代码来处理“粘贴”事件,但它似乎无法正常工作。根据 WebKit DOM 引用,oncutonpasteoncopy 都或多或少地像 W3C Clipboard 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);
}

我再次尝试使用 plain 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 能正常工作。据我所知,在第二次尝试(普通)中,我正在做 WebKit 引用建议我应该做的事情,但它根本不起作用。这是 Safari 的一些已知限制,还是椅子和键盘之间的问题?

更新:Safari 似乎没有实现剪贴板 API 的 W3C 工作草案。我正在研究变通办法,但如果有人知道,我很乐意听听。

最佳答案

我认为答案是“不”,尽管它可能并不令人满意。请参阅此 WebKit 错误:

https://bugs.webkit.org/show_bug.cgi?id=75891

如果您打算将粘贴数据接收到内容不可编辑的内容、文本输入或文本区域,我不知道有什么方法可以让当前版本的 Safari 执行此操作。

更新:在 this JSFiddle 中尝试变通, 简化为仅处理文本,在 Safari 6.0.5 中不起作用。它尝试一种变通方法,当按下 Cmd-V 时隐藏的文本字段会自动聚焦,只是为了在 Safari 中启用粘贴。它确实防止了“你不能粘贴哔”,但没有发送粘贴事件,也没有任何内容被粘贴到 secret 输入中。

$(function () {
    $(window).bind('keydown', function (e) {
        // Cmd-V
        if (e.which == 86 && e.metaKey) {
            if (e.target.nodeName.toUpperCase() !== "INPUT")
                $('#secretinput').focus();
        }
    });

    $(window).bind('beforepaste', function (e) {
        return false;
    });

    $(window).bind('paste', function (e) {
        var clipboardData = e.originalEvent.clipboardData;
        console.log(clipboardData);
        $('#textdest').html(clipboardData.getData('text/plain'));
    });
});

关于javascript - Safari 是否正确处理了粘贴事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16930542/

相关文章:

html - 在 iOS 上的 Quicktime 中启动嵌入的 YouTube 视频

angularjs - Ionic 2 事件,发布和订阅不工作

javascript - 如何像 xml 解析器一样将 html 打印为纯文本?

html - Safari 导致意外的 div 偏移

php - 使用 PHP 和 Javascript 的组合填充下拉列表

javascript - Safari 9 仅在 Canvas 上绘制视频的第一帧(错误)

javascript - Firefox 插件 : new tab extension

javascript - 提交表单时使用_trackEvent进行Google Analytics(分析)事件跟踪

javascript - 在 mysql 数组上使用 php 或 javascript 进行演绎过滤搜索

javascript - 授权回调错误