chrome extension API for refreshing the page

落花浮王杯 提交于 2019-12-29 03:54:10

问题


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.


回答1:


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




回答2:


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.




回答3:


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.




回答4:


More specifically:

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



回答5:


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




回答6:


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.



来源:https://stackoverflow.com/questions/8342756/chrome-extension-api-for-refreshing-the-page

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!