Javascript 如何获取选项卡的上一个URL?
在编写Chrome扩展时,给定一个选项卡,如何获取该选项卡中以前访问过的页面的URL?i、 e.在我点击“后退”后,将出现在omnibar中的url?由于我找不到任何API方法,我只是应用了:每次加载页面时,我都存储从其id到其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.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
,这是一种老式的、持久的、同步的存储方式。