【问题标题】:chrome extension API for refreshing the page用于刷新页面的 chrome 扩展 API
【发布时间】:2011-12-01 14:17:08
【问题描述】:

是否有 API 可以从浏览器操作按钮内以编程方式刷新当前选项卡?我配置了后台页面,它通过以下方式附加了一个侦听器:

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

因此,回调函数检索对单击它的选项卡的引用,但我在任何地方都看不到用于刷新/重新加载该选项卡的 API。

【问题讨论】:

    标签: google-chrome google-chrome-extension


    【解决方案1】:

    我认为您正在寻找的是:

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

    查看tabs API() documentation了解更多信息。

    【讨论】:

    • 如果不传递任何参数,它将刷新当前窗口的选定选项卡。
    【解决方案2】:

    接受的答案使用的 chrome.tabs.getSelected() API已被弃用。您应该改为获取当前选项卡并使用以下内容重新加载它:

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

    或许:

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

    我对第二个版本没有真正的运气,尽管其他答案似乎表明它应该可以工作。 API 似乎也暗示了这一点。

    【讨论】:

    • 为我工作,但不断收到extensions::lastError:131 Unchecked runtime.lastError while running tabs.executeScript: Cannot access contents of url "https://jsfiddle.net/". Extension manifest must request permission to access this host.
    • @Michael,executeScript 和 tabs.reload 不是已经默认为当前选项卡了吗?那么chrome.tabs.query有什么意义呢?
    【解决方案3】:

    我建议使用chrome.tabs.executeScript 将调用window.location.reload() 的javascript 注入当前选项卡。比如:

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

    参考here

    【讨论】:

    • chrome.tabs.getSelected() 已被弃用。 My answer 使用相同的基本方法,但使用当前公认的方式来获取当前选项卡。
    • @Boris,executeScript 不是已经默认为当前选项卡了吗?那么chrome.tabs.getSelected有什么意义呢?
    • 下面的答案 (stackoverflow.com/a/8933014/187360) 指向 API 文档是解决此问题的最佳方法。也许在 2014 年,上述方法是达到目的的最佳手段,但对于今天的开发周期而言已不再适用。
    【解决方案4】:

    更具体地说:

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

    【讨论】:

    • getSelected() 已被弃用
    【解决方案5】:

    你也可以这样用:

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

    reload 函数参数:整数 tabId,对象 reloadProperties, 函数回调

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

    【讨论】:

      【解决方案6】:

      如果您想重新加载所有已完全加载并在其窗口中处于活动状态的选项卡

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

      您可以更改参数对象以仅获取活动选项卡,因为{status:'complete', active: true} 参考query api of chrome extensions

      不使用chrome.tabs.reload的原因:

      如果标签属性特别是 tab.url 没有改变,标签不会重新加载。如果你想每次都强制重新加载,最好用它自己的 tab.url 更新选项卡 URL,它会发送属性更改的事件,并且选项卡会自动重新加载。

      【讨论】:

        猜你喜欢
        • 2012-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-11
        • 2023-02-20
        • 2021-05-03
        相关资源
        最近更新 更多