3

所以我有一个后台页面可以监听标签的变化

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();

这段代码获取网站的名称并根据网站获取参数列表。现在我有了数据,我想知道如何在浏览器操作弹出窗口中显示这些数据。我想将此数据传递给浏览器 Action 并在那里解析它以替换现有内容。我怎么做?

4

2 回答 2

4

您需要记住的一件事是弹出页面在弹出窗口关闭时不会存在(与背景页面不同)。这意味着您不能只将数据传输到弹出页面,因为它在任何时候都不存在于任何地方。相反,每当打开弹出窗口时,您需要做的第一件事就是从存储中请求信息并根据需要显示它。

在您的后台页面中,当您收到当前域的数据时,您应该将其保存在某处:可以在localStorage、 或sessionStorage、 或chrome.storage(查看文档以查看哪个在您的用例中更有意义)。您最有可能希望将其保存在域中的索引上,以便您可以在需要时从所有打开的选项卡中保存信息。

然后每当弹出窗口打开时,从您使用的存储中获取当前选项卡的数据,并以您想要的任何方式显示数据。

于 2013-09-05T17:00:11.737 回答
0

您可以通过chrome.extension.getBackgroundPage()window直接从弹出窗口访问背景。

window当它被 chrome.extension.getViews({type:'popup'})[0]打开时,您也可以直接从后台访问弹出窗口。

使用这些方法,您可以在弹出窗口和后台之间实现消息传递。

于 2016-03-08T15:30:38.953 回答