2012-01-09 4 views
4

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

«разрешения»: [ «clipboardRead», «clipboardWrite» ]

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

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

};

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

+0

- inp.val набор? вы пробовали отладку? Chrome предлагает мощную функцию отладки. здесь учебник по отладке фоновых скриптов (http://code.google.com/chrome/extensions/tut_debugging.html). Почти то же самое относится к сценариям контента. –

+0

inp.val установлен. фокус и выбор также работали правильно. я проверен, сделав вход видимым и наблюдая, как текст появляется и выбирается. проблема была целиком в том, что хром не позволял execCommand, чего я не смог сделать даже с консоли на локальной странице. – sh4d0w

ответ

7

После немного более глубокого рытья я обнаружил, что мне нужно использовать фоновый рисунок. По-видимому, это единственное, что вы можете вызвать 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 только для того, чтобы заставить нас делать это глупое обходное решение?), но хорошо, этого будет достаточно для время

+0

Они удалили фоновый рисунок, как я могу заставить это работать? ; ( – mrzepa

+0

Теперь он перешел в «страницы» под «фоновым» объектом. – tubaguy50035

Смежные вопросы