Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Chrome Extension: Make it run every page load

I want to make a chrome extension that executes some scripts after one page is loaded, I am not sure whether I have to implement this logic on the background page or it can be anywhere else, any help here will be greatly appreciated.

like image 322
albertosh Avatar asked Jun 27 '11 18:06

albertosh


4 Answers

From a background script you can listen to the chrome.tabs.onUpdated event and check the property changeInfo.status on the callback. It can be loading or complete. If it is complete, do the action.

Example:

chrome.tabs.onUpdated.addListener( function (tabId, changeInfo, tab) {
  if (changeInfo.status == 'complete') {

    // do your things

  }
})

Because this will probably trigger on every tab completion, you can also check if the tab is active on its homonymous attribute, like this:

chrome.tabs.onUpdated.addListener( function (tabId, changeInfo, tab) {
  if (changeInfo.status == 'complete' && tab.active) {

    // do your things

  }
})
like image 179
fiatjaf Avatar answered Sep 21 '22 23:09

fiatjaf


If it needs to run on the onload event of the page, meaning that the document and all its assets have loaded, this needs to be in a content script embedded in each page for which you wish to track onload.

like image 28
Matchu Avatar answered Sep 21 '22 23:09

Matchu


You can put your script into a content-script, see

  • content-script
like image 27
Bohdan Avatar answered Sep 24 '22 23:09

Bohdan


This code should do it:

manifest.json

   {
      "name": "Alert 'hello world!' on page opening",
      "version": "1.0",
      "manifest_version": 2,
      "content_scripts": [
        {
          "matches": [
            "<all_urls>"
          ],
          "js": ["content.js"]
        }
      ]
    }

content.js

alert('Hello world!')
like image 39
Vlad Hilko Avatar answered Sep 21 '22 23:09

Vlad Hilko