user287848
user287848

Reputation: 141

Running an extension in background on page load/refresh

I'm new to writing extensions (and javascript). I'd like an extension to run on a timer whenever a certain URL is opened/refreshed. Code is below. This is all I have so far from what I've found online. I'm not sure if this will run for just one tab at a time.

manifest.json

    {
  "manifest_version": 2,

  "name": "Test Plugin",
  "description": "This extension is a test.",
  "version": "1.0",

    "content_scripts": [
    {
      "matches": ["https://www.google.com/*"],
      "js": ["main.js"]
    }
  ],
  "permissions": [
   "activeTab"
   ]
}

main.js

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

    setInterval(mainF, 5000)

  }
})

    function mainF() {
        var getTitle = document.getElementById('title');
        var titleValue = getTitle.Value();

        var fso = new ActiveXObject("Scripting.FileSystemObject");
        var fh = fso.OpenTextFile("test.txt", 8, false, 0);
        fh.WriteLine(titleValue);
        fh.Close()
    }

Upvotes: 0

Views: 2048

Answers (1)

Haibara Ai
Haibara Ai

Reputation: 10897

Move your logic to the Event Page.

Content Script doesn't have access to chrome.tabs API.

And according to best practices when using event pages,

Use event filters to restrict your event notifications to the cases you care about. For example, if you listen to the tabs.onUpdated event, try using the webNavigation.onCompleted event with filters instead (the tabs API does not support filters). That way, your event page will only be loaded for events that interest you.

Code snippets would look like

manifest.json

{
    "manifest_version": 2,
    "name": "Test Plugin",
    "description": "This extension is a test.",
    "version": "1.0",
    "background": {
        "scripts": ["main.js"],
        "persistent": false
    },
    "permissions": [
        "webNavigation"
    ]
}

main.js

chrome.webNavigation.onCompleted.addListener(function(details){
    console.log("Certain url with hostSuffix google.com has been loaded");
}, {url: [{hostSuffix: 'google.com'}]});

Upvotes: 3

Related Questions