izzy00
izzy00

Reputation: 13

chrome extension - chrome.tabs.executeScript after page redirect

I'm trying to make a Google chrome extension that injects a script upon clicking the extension icon. However, i want the same script to be injected whenever I load/go to another page, without having to click on the extension icon again.

background.js

chrome.browserAction.onClicked.addListener(function (tab) {
 if (tab.url.startsWith("https://")){ 
    chrome.tabs.executeScript(tab.id, {
        "file": "js/contentscript.js"
    }, function () {
        console.log("Script Executed .. "); // Notification on Completion
    });
 }
 else{
    alert('Error');
 }
});

manifest.json i want to execute the script on browserAction so adding the script on content_scripts is not an option i would like to pursue

"permissions": ["tabs", "windows", "notifications", "activeTab"],
"version": "2.0",
"browser_action": 
{
    "name": "Click to activate extension",
    "default_icon": "images/icon.png",
},
"background":
{
    "scripts":["js/background.js"]
},
"icons":
{
    "16": "images/icon16.png",
    "48": "images/icon48.png",
    "128": "images/icon128.png"
},
"content_scripts": 
[{
    "js": ["js/jquery-2.1.4.min.js"],
    "matches": [ "https://*/*" ],
    "run_at": "document_end"
}]

contenscript.js - only a sample script, but gets my point across

alert("here");
setTimeout(function(){window.open("www.google.com");});

P.S. This is my first time asking a question in stackoverflow, please be gentle with me. :D

Upvotes: 1

Views: 5079

Answers (1)

Haibara Ai
Haibara Ai

Reputation: 10897

You could listen to webNavigation.onCompleted event, which fires when a document, including the resources it refers to, is completely loaded and initialized.

Compared with tabs.onUpdated event, you could use event filters to restrict your event notifications. For this part, you could check my answer in this post Running an extension in background on page load/refresh for more details.

manifest.json

{
    "name": "36735306",
    "version": "1.0",
    "description": "Your description here",
    "manifest_version": 2,
    "background": {
        "scripts": ["background.js"]
    },
    "web_accessible_resources": ["content.js"],
    "permissions": [
        "webNavigation",
        "<all_urls>"
    ]
}

background.js

chrome.webNavigation.onCompleted.addListener(function(details) {
    if(details.frameId === 0) {
        chrome.tabs.executeScript(details.tabId, {"file": "content.js"}); 
    }
});

Upvotes: 4

Related Questions