Не удается заставить execCommand ('paste') работать в Chrome
я столкнулся с проблемой с моим расширением. Я осмотрелся и нашел, что мне нужно сделать, я просто не могу заставить его работать.
пока у меня есть:
function pasteAndGo()
{
    document.execCommand('paste')
    alert("Pasted")
}
появляется предупреждение, но ничего не было вставлено.
у меня такое чувство, что это document часть, которая нуждается в изменении, но я не могу найти что.
5 ответов
в Chrome был экспериментальный API буфера обмена, но это было удалено в Chrome 13.
Chrome перешел к более стандартному document.execCommand('paste'), document.execCommand('copy') и document.execCommand('cut') команды: https://developer.mozilla.org/en/Rich-Text_Editing_in_Mozilla#Executing%5FCommands
В Chrome вам понадобятся разрешения, которые необходимо добавить в манифест: "clipboardRead"и " clipboardWrite". http://developer.chrome.com/extensions/declare_permissions.html
до Chrome 38 эти разрешения буфера обмена были доступны только для страниц расширения, таких как фоновые скрипты. Начиная с Chrome 39 сценарии содержимого также могут использовать эти API буфера обмена после объявления разрешений буфера обмена в файле манифеста (crbug.com/395376).
Это хорошо работает для меня на фоновой странице.
function getClipboard() {
    var pasteTarget = document.createElement("div");
    pasteTarget.contentEditable = true;
    var actElem = document.activeElement.appendChild(pasteTarget).parentNode;
    pasteTarget.focus();
    document.execCommand("Paste", null, null);
    var paste = pasteTarget.innerText;
    actElem.removeChild(pasteTarget);
    return paste;
};
конечно, ваше расширение по-прежнему нуждается в разрешении "clipboardRead", и вы должны использовать передачу сообщений, чтобы вернуть эту информацию в свой скрипт контента:
содержание.js:
chrome.extension.sendMessage({
    cmd: "clipboard", //$NON-NLS-0$
    action: "paste" //$NON-NLS-0$
}, function(response) {
    if (response.paste) {
        var range = document.getSelection().getRangeAt(0);
        range.deleteContents();
        range.insertNode(document.createTextNode(response.paste));
    }
});
фон.js:
function getClipboard() {
    var pasteTarget = document.createElement("div");
    pasteTarget.contentEditable = true;
    var actElem = document.activeElement.appendChild(pasteTarget).parentNode;
    pasteTarget.focus();
    document.execCommand("Paste", null, null);
    var paste = pasteTarget.innerText;
    actElem.removeChild(pasteTarget);
    return paste;
};
function onClipboardMessage(request, sender, sendResponse) {
    if (request.action === "paste") { //$NON-NLS-0$
        sendResponse({
            paste: getClipboard()
        });
    }
}
chrome.extension.onMessage.addListener(onClipboardMessage);
вам нужно установить clipboardRead разрешение на применение document.execCommand('paste') и clipboardWrite разрешение на применение execCommand('copy') и execCommand('cut').
В противном случае разрешения будут отклонены, и ничего не произойдет.  
Регистрация этой ссылке для более подробной информации.
вам нужен элемент управления в фокусах, который способен получать содержимое...
для некоторых примеров относительно буфера обмена в JS см. http://www.geekpedia.com/tutorial126_Clipboard-cut-copy-and-paste-with-JavaScript.html
и http://help.dottoro.com/ljcvtcaw.php
относительно расширений Chrome см. Копировать / Вставить не работает в расширении Chrome
