Показать сообщение отдельно
  #15 (permalink)  
Старый 09.11.2016, 21:45
Аспирант
Отправить личное сообщение для Ostic Посмотреть профиль Найти все сообщения от Ostic
 
Регистрация: 31.08.2016
Сообщений: 49

это 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});
};

я, конечно, свой код покрамсал и поэтому могут быть ошибки, но суть такова: сообщение - ответ.
если надо длительное общение поддерживать, то лучше создавать именованный канал и не забывать его закрывать, а то скрипты так и будут висеть.
Ответить с цитированием