从Chrome应用程序(不是扩展程序或页面)将图像复制到剪贴板

时间:2016-02-05 22:57:49

标签: javascript google-chrome google-chrome-app copy-paste

我正在努力将图片从Chrome应用中复制到剪贴板。请注意,我是专门针对新的Chrome应用程序(以前称为Chrome打包应用程序)而不是Chrome扩展程序或Chrome中的常规网页提出的。

我已经要求" clipboardWrite"和" clipboardRead" manifest.json中的权限

"permissions": [
    {"fileSystem": ["write", "retainEntries", "directory"]}, 
    "https://www.google-analytics.com/",
    "storage",
    "clipboardWrite",
    "clipboardRead"
],

基于相关的"将图像复制到剪贴板"关于StackOverflow的问题,我尝试了4种不同的方法。

function onClickButton() {
    document.oncopy = function(event) {
        var dataURL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAIAAAA7ljmRAAAAGElEQVQIW2P4DwcMDAxAfBvMAhEQMYgcACEHG8ELxtbPAAAAAElFTkSuQmCC";
        // base64 decode the data url, skipping the data url prefix 
        var data = atob(dataURL.substring("data:image/png;base64,".length));
        // copy the decoded data to an binary array 
        var dataArray = new Uint8Array(data.length);
        for (var i = 0; i < data.length; i++) {
            dataArray[i] = data.charCodeAt(i);
        }

        // approach 1 - failed, pastes nothing
        event.clipboardData.setData('image/png', dataArray);

        // approach 2 - failed, pastes nothing
        event.clipboardData.setData('text/uri-list', dataURL);

        // approach 3 - failed, ends up pasting the text "image.png"
        var file = new File(dataArray, "image.png", {type: "image/png"});
        event.clipboardData.items.add(file);

        // approach 4 - failed, pastes nothing
        event.clipboardData.items.add(dataURL, 'text/uri-list');

        event.preventDefault();
    };
    document.execCommand("Copy");
}

此代码仅在未注释的4种方法中的1种中运行。有一种方法有效吗?仅供参考,方法1适用于&#34; text / plain&#34;和一些示例文本。所以我有理由相信,至少那种方法可以与那些做某事的API一起使用。

0 个答案:

没有答案