Расширение Chrome: копировать текст - PullRequest
4 голосов
/ 10 января 2012

У меня есть простое расширение для Chrome, где я хочу щелкнуть изображение и скопировать ссылку рядом с ним.У меня есть все на месте, но копия не будет работать для меня.У меня есть следующие разрешения в моем манифесте:

"permissions": ["clipboardRead", "clipboardWrite"]

Затем я создаю вход с идентификатором "copyInp" и использую следующую функцию дляскопировать в буфер обмена (здесь попытался сделать это как можно более продуманно, поэтому он не самый компактный):

function copyLinkToClipboard( link ) {
$("#copyInp").val(link);
var inp = document.getElementById("copyInp");
inp.focus();
inp.select();
document.execCommand('copy');

};

После этого запуска в моем буфере обмена ничего нового не появляется, когдаЯ Ctrl + V.Есть идеи, что здесь происходит не так?Входные данные определенно содержат текст, который я хочу, и у меня есть разрешение в манифесте.Любая помощь будет принята с благодарностью ...

1 Ответ

7 голосов
/ 10 января 2012

После еще нескольких копаний я обнаружил, что мне нужно использовать фоновую страницу. Видимо, это единственное, что вы можете вызвать document.execCommand. Итак, исправление состоит в том, чтобы создать background.html с функцией копирования и входными данными, добавив прослушиватель следующим образом:

chrome.extension.onRequest.addListener(function(obj) {
        copyLinkToClipboard( obj.link );
});

, а затем с помощью sendRequest передайте текст, который вы хотите скопировать, на фоновую страницу:

chrome.extension.sendRequest({link: linkText});

и не забудьте добавить фоновую страницу в манифест

"background_page": "background.html",

вуаля. текст скопирован в буфер обмена. Я ЛЮБЛЮ более простой способ сделать это (если проблема заключается в безопасности, то почему бы не создать API для расширений? Или, скорее, отказаться от экспериментального API только для того, чтобы заставить нас сделать этот глупый обходной путь?), ну да ладно, этого будет достаточно для время

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...