chinabuffet
chinabuffet

Reputation: 5588

chrome extension API for refreshing the page

Is there an API to programmatically refresh the current tab from inside a browser action button? I have background page configured, which attaches a listener via:

chrome.browserAction.onClicked.addListener(function(tab) { ... });

So the callback function retrieves a reference to the tab that it was clicked from, but I don't see an API anywhere to refresh/reload that tab.

Upvotes: 33

Views: 56371

Answers (6)

Selman Kahya
Selman Kahya

Reputation: 185

You can also use this:

chrome.tabs.reload(function(){});

reload function params: integer tabId, object reloadProperties, function callback

Reference: http://developer.chrome.com/extensions/tabs.html#method-reload

Upvotes: 6

Irshad
Irshad

Reputation: 1114

if you want to reload all the tabs which have loaded completely and are active in their window

chrome.tabs.query({status:'complete'}, (tabs)=>{
tabs.forEach((tab)=>{
    if(tab.url){
        chrome.tabs.update(tab.id,{url: tab.url});
     }
    });
});

you can change the parameter object to fetch only active tabs as {status:'complete', active: true} refer to query api of chrome extensions

Reason for not using chrome.tabs.reload :

If the tab properties especially the tab.url have not changed, tab does not reload. If you want to force reload every time, it is better to update the tab URL with its own tab.url which sends the event of the change in property and tab automatically reloads.

Upvotes: 0

Michael Oryl
Michael Oryl

Reputation: 21652

The API for chrome.tabs.getSelected(), which the accepted answer uses, has been deprecated. You should instead get the current tab and reload it using something like the following:

chrome.tabs.query({active: true, currentWindow: true}, function (arrayOfTabs) {
    var code = 'window.location.reload();';
    chrome.tabs.executeScript(arrayOfTabs[0].id, {code: code});
});

Or perhaps:

chrome.tabs.query({active: true, currentWindow: true}, function (arrayOfTabs) {
    chrome.tabs.reload(arrayOfTabs[0].id);
});

I had no real luck with the second version, though other answers seem to suggest it should work. The API seems to suggest that, too.

Upvotes: 46

Boris Smus
Boris Smus

Reputation: 8472

I recommend using chrome.tabs.executeScript to inject javascript that calls window.location.reload() into the current tab. Something like:

chrome.tabs.getSelected(null, function(tab) {
  var code = 'window.location.reload();';
  chrome.tabs.executeScript(tab.id, {code: code});
});

Reference here

Upvotes: 37

Mitya
Mitya

Reputation: 1023

I think what you're looking for is:

chrome.tabs.reload(integer tabId, object reloadProperties, function callback)

Check out tabs API() documentation for more information.

Upvotes: 57

Jude Osborn
Jude Osborn

Reputation: 1798

More specifically:

chrome.tabs.getSelected(null, function(tab) {
    chrome.tabs.reload(tab.id);
});

Upvotes: 9

Related Questions