abhilash
abhilash

Reputation: 865

chrome extension : Stop loading the page on launch

I would like to stop the page loading when I click the extension icon. I have a background page , I need an option similar to window.stop() when I click the extension Icon. If the main page is still in loading condition stop loading and load the content JavaScript of extension should work.

Upvotes: 7

Views: 4700

Answers (2)

Zsolt Sky
Zsolt Sky

Reputation: 557

Since manifest version 3 you need to use scripting. This requires permissions ["scripting", "tabs"] and the host_permissions must be allowed for the current URL.

function stopLoading(tab) {
    console.debug('Stopping loading of tab ' + tab.id);
    chrome.scripting.executeScript({
        target: {tabId: tab.id},
        func: function() {
            window.stop();
        }
    });
}

chrome.action.onClicked.addListener(() => {
    chrome.tabs.query({ active: true, currentWindow: true })
        .then(tabs => stopLoading(tabs[0]));
});

Upvotes: 0

Xan
Xan

Reputation: 77502

You can always do this (requires host permissions or activeTab):

chrome.browserAction.onClicked.addListener(function(tab) {
    chrome.tabs.executeScript(tab.id, {
        code: "window.stop();",
        runAt: "document_start"
    });
});

I am not sure what happens with manifest-defined content scripts. It's possible that scripts defined with run_at other than document_start will not be injected; in this case you can use executeScript's callback to inject them in any case, and put in some guard code in the content script to prevent it from executing twice:

// content.js
if(contentInjected) return;
var contentInjected = true;

/* rest of the code */

Upvotes: 4

Related Questions