Reputation: 865
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
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
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