Google Chrome Extensions: как определить действие копирования (Ctrl-C и Edit-Copy)? - PullRequest
6 голосов
/ 20 мая 2010

Как я могу обнаружить, что пользователь выбрал и скопировал некоторый контент на активной в данный момент вкладке в расширении Google Chrome?

Похоже, что в chrome.tabs или chrome.windows нет подходящих событий, связанных с буфером обмена.

Есть ли способ обнаружить такие действия с помощью скриптов содержимого?

Ответы [ 3 ]

7 голосов
/ 27 мая 2010

Я нашел следующее решение:

  1. Настройте файл манифеста для определения сценария содержимого, который добавляется на каждую страницу, и отдельной фоновой страницы.
  2. В файле Content Script .js добавьте прослушиватель событий для события «copy», либо для документа, либо для окна. Этот прослушиватель событий вызывается всякий раз, когда пользователь инициирует действие копирования.
  3. Поскольку скрипты содержимого существуют в изолированной программной среде безопасности (например, нет межсайтовых XMLHttpRequests), мы, вероятно, хотим ответить на событие на фоновой странице. Для этого используйте API передачи сообщений Chrome, поэтому отправьте сообщение на фоновую страницу.

Небольшой рабочий пример:

manifest.json

{
  "background_page": "background.html",
  "content_scripts": [
      {
        "matches": ["http://*/*"],
        "js": ["oncopy.js"]
      }
    ]
}

oncopy.js

// on copy event, send a message to background.html
function onCopy(e) { 
    chrome.extension.sendRequest({event: "copy"});
}

//register event listener for copy events on document
document.addEventListener('copy',onCopy,true); 

background.html

chrome.extension.onRequest.addListener(
  function(request, sender, sendResponse) {
    if (request.event == "copy") {
       alert("copy detected");
    }
    sendResponse({});
  });
0 голосов
/ 26 мая 2010

В Google Chrome Extensions есть экспериментальный API, который вы можете использовать для копирования, вырезания и вставки. В настоящее время он существует в бета-версии, поэтому очень скоро он выйдет из экспериментального в стабильный.

http://code.google.com/chrome/extensions/dev/experimental.clipboard.html

0 голосов
/ 24 мая 2010

Вам нужно будет записать onkeypress в элементе документа, используя свой собственный обработчик событий, проверьте, что event.keyCode = 'C' (или код ascii) и что event.ctrlKey = true

Если этодопустимо, тогда, скорее всего, пользователь скопировал текст на текущей странице.

Вам также нужно будет захватить событие tab.updated, чтобы вы знали, когда следует связать событие onkeypress.

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