Javascript 如何获取选项卡的上一个URL?

Javascript 如何获取选项卡的上一个URL?,javascript,google-chrome-extension,Javascript,Google Chrome Extension,在编写Chrome扩展时,给定一个选项卡,如何获取该选项卡中以前访问过的页面的URL?i、 e.在我点击“后退”后,将出现在omnibar中的url?由于我找不到任何API方法,我只是应用了:每次加载页面时,我都存储从其id到其url的映射。然后,当我想查找选项卡的上一页时,我可以在那里搜索它 因此,存储: chrome.webNavigation.onCommitted.addListener(function (data) { if (data.frameId !== 0) {

在编写Chrome扩展时,给定一个选项卡,如何获取该选项卡中以前访问过的页面的URL?i、 e.在我点击“后退”后,将出现在omnibar中的url?

由于我找不到任何API方法,我只是应用了:每次加载页面时,我都存储从其id到其url的映射。然后,当我想查找选项卡的上一页时,我可以在那里搜索它

因此,存储:

chrome.webNavigation.onCommitted.addListener(function (data) {
  if (data.frameId !== 0) {
      // Don't trigger on iframes
      return;
  }

  var tabIdToUrl = {};
  tabIdToUrl[data.tabId.toString()] = data.url;
  chrome.storage.local.set(tabIdToUrl);
});
和检索:

chrome.storage.local.get(tabId, function (item) {
  var url = item[tabId];
  ...
});

我遇到了同样的问题,真希望ChromeAPI能够在活动中返回前后url

我的解决方案类似于@Oak,但由于以下两个原因,我没有使用它:

  • chrome.storage.local
    的行为类似于
    Window.localStorage
    即使在浏览器关闭并重新打开时,它仍然存在。如果不自己清理,本地存储将随着大量冗余信息的增加而增加。使用会话存储,无论何时关闭所有浏览器实例(永久性后台页面的生命周期结束)。它将方便地忘记一切:)
  • Window.sessionStorage
    只在字符串中存储数据,这对这个用例(tab.url)很有好处,
    chrome.storage.local
    是一个更强大的工具,当你想存储对象时,你可以节省一些空间
  • 我的测试用例是这样的:

    chrome.tabs.onUpdated.addListener(function(tabId,changeInfo,tab){
        var newUrl = changeInfo.url;
        if(newUrl){
            window.sessionStorage[tabId] = newUrl;
        }
    });
    

    window.history.back()
    就足够了吗?@DavidSawyer但这会改变运行扩展的选项卡,而不是我要针对的选项卡,除非您建议我将其插入该选项卡中。在任何情况下,这都会更改选项卡,而不仅仅返回以前的url.Gotcha。那么,我不确定什么是最好的。您可能需要维护自己的已访问选项卡列表。这是异步的;由于您可能不需要永久存储此信息,因此最好实现内存中的同步存储。@Xan这是一个很好的观点,您是否介意编辑我的答案(或添加一个新答案)以演示如何执行此操作?无需特别技巧-除非您使用的是卸载的事件页,您可以在后台页面中将
    选项卡idtour
    对象保持全局。只要你的背景页面处于活动状态,它就会一直存在。@Xan啊,但我的背景是
    “持久”:false,我想这会在这里引起问题。是的,那么
    chrome。存储是最好的解决方案。您还可以使用
    localStorage
    ,这是一种老式的、持久的、同步的存储方式。