Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Google Chrome Extensions: How to detect Copy action (Ctrl-C and Edit-Copy)?

How might I detect that a user has selected and copied some content in the currently active tab in a Google Chrome Extension?

It appears that there are no suitable Events that deal with the Clipboard in chrome.tabs or chrome.windows.

Is there a way to detect such actions through Content Scripts?

like image 665
bjoern Avatar asked May 20 '10 00:05

bjoern


1 Answers

I found the following solution:

  1. Set up a manifest file to define a content script that is added to every page, and a separate background page.
  2. In the Content Script .js file, add an event listener for the 'copy' event, either for the document or the window. This event listener is called whenever the user initiates a copy action.
  3. Since content scripts exist in a security sandbox (e.g., no cross-site XMLHttpRequests), we probably want to respond to the event in the background page. To do so, use the Chrome message passing API so send a message to the background page.

A small working example:

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({});
  });
like image 114
bjoern Avatar answered Sep 30 '22 15:09

bjoern