所以我有一个监听标签更改的背景页面
var tabHandler={
onTabUpdate:function(tabId, changeInfo, tab){
},
tabChanged:function(activeInfo) {
function tabChanged(tab){
var parser = document.createElement('a');//To extract the hostname, we create dom element
parser.href = tab.url;
var regex=/^(www\.)?([^\.]+)/
var matches=regex.exec(parser.hostname)//This gives us the hostname, we extract the website name
var website=matches[2];
var data=getDataForWebsite(website);//Data is a json array
//TRANSFER 'data' to Browser popup so that it can be displayed.
}
chrome.tabs.get(activeInfo.tabId,tabChanged);
},
init:function(){
chrome.tabs.onActivated.addListener(this.tabChanged);
}
}
tabHandler.init();
这段代码获取网站的nam并根据网站获取参数列表。现在我有了数据,我想知道如何在浏览器动作弹出窗口中显示这些数据。我想将此数据传递给浏览器Action adn然后在那里解析它以替换现有内容。我该怎么做?
答案 0 :(得分:4)
您需要记住的一件事是,弹出窗口关闭时弹出页面不会生效(与背景页面不同)。这意味着您不能只将数据传输到弹出页面,因为它始终不存在于任何地方。相反,每当打开弹出窗口时,您需要做的第一件事就是从存储中请求信息并随时显示它。
在您的后台页面中,当您收到当前域的数据时,您应将其保存在某处:可能位于localStorage
,sessionStorage
或chrome.storage
(请查看文档,看看哪一个在你的用例中更有意义)。您可能希望将其保存在域中最有可能的索引,以便您可以在需要时从所有打开的选项卡中保存信息。
然后,只要弹出窗口打开,从您使用的存储中获取当前选项卡的数据,并以您想要的任何方式显示数据。
答案 1 :(得分:0)
您可以通过chrome.extension.getBackgroundPage()弹出窗口直接访问背景window
。
您可以在chrome.extension.getViews({type:'popup'})[0]打开后,直接从后台访问弹出窗口的window
。
使用这些方法,您可以在弹出窗口和后台之间实现消息传递。