это eventPage.js (по-вашему background)
list = ['google.ru','mail.ru','yandex.ru'];
//chrome.webNavigation.onDOMContentLoaded.addListener(onNavigate);
chrome.webNavigation.onCompleted.addListener(onNavigate);
function onNavigate(details){
var len = list.length;
var tabID = details.id;
var tabUrl = details.url.replace(/^https?\:\/\/(www\.)?/, '');
for (var i=0; i < len; i++){
if( tabUrl.startsWith(list[i]) ){
if (details.frameId != 0) break; /*иначе, например, bing "съедает" две загрузки, те msg будет показан 2*/
var siteName = list[i];
var msg = list[i];
chrome.tabs.insertCSS(tabID, {file:"css/content_style.css"});
chrome.tabs.executeScript(tabID, {file: "js/content_script.js"});
tabConnect({msg_:msg, name_:siteName});
};
};
function tabConnect(msg) {
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
var port = chrome.tabs.connect(tabs[0].id);
port.postMessage(msg);
port.onMessage.addListener(function getResp(response){
if(response.close_){
sessionStorage.setItem(response.name_, 3);
};
});
});
};
а это в том самом скрипте, который вживляется в указанные в массиве сайты нексолькими строками выше, так называемый content_script.js
var siteName;
var portName;
var div = document.createElement('div');
chrome.runtime.onConnect.addListener(function(port) {
portName = port;
port.onMessage.addListener(function(msg) {
if(msg.msg_) showMessage(msg.msg_);
if(msg.name_) siteName = msg.name_;
});
});
function showMessage(msg){
div.className = "injection";
div.innerHTML = '<p class="inj_message">' + msg + '</p>';
div.addEventListener('click', clickHandler);
document.body.appendChild(div);
};
function clickHandler(){
document.body.removeChild(div);
portName.postMessage({name_:siteName, close_:true});
};
я, конечно, свой код покрамсал и поэтому могут быть ошибки, но суть такова: сообщение - ответ.
если надо длительное общение поддерживать, то лучше создавать именованный канал и не забывать его закрывать, а то скрипты так и будут висеть.