Не удается заставить 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