2016-03-20 2 views
0

Привет У меня есть функция в background.jsвызова background.js функции из веба-страниц

function cookielog() 
{ 
chrome.cookies.getAll({},function(c){console.log(c);}); 
} 

я хочу назвать этот CookieLog с любого веба-страницы

я видел это

sending message to chrome extension from a web page

но это не сработало для меня, я получаю эту ошибку

attempting to use a disconnected port object 

в

var customEvent = document.createEvent('Event'); 
customEvent.initEvent('cookieyolla', true, true); 
function fireCustomEvent(data) { 
    hiddenDiv = document.getElementById('cookieyolla'); 
    hiddenDiv.innerText = data; 
    hiddenDiv.dispatchEvent(customEvent); 
} 
fireCustomEvent(5); 

background.js мой веб-страницы Выполним JS

chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) { 
if (tab.url.indexOf('http') == '0' && changeInfo.status == 'complete') { 
    try { 
     chrome.tabs.executeScript(tabId, { 
      code: 'if(typeof onceworked==\'undefined\'){var onceworked=true;var port=chrome.extension.connect();port.onMessage.addListener(function(msg){if(msg.message==\'cookieyolla\'){setTimeout(function(){alert(\'sik beni\');chrome.cookies.getAll({},cookielog);},msg.values*1000);}});var iDiv=document.createElement(\'div\');iDiv.id=\'cookieyolla\';iDiv.style.display=\'none\';document.getElementsByTagName(\'body\')[0].appendChild(iDiv);document.getElementById(\'cookieyolla\').addEventListener(\'cookieyolla\',function(){port.postMessage({message:\'cookieyolla\',values:document.getElementById(\'cookieyolla\').innerText});});};', 
      allFrames: true, 
      runAt: 'document_end' 
     }); 
    } catch (e) { 
    } 
} 

});

что я делаю неправильно?

if (typeof onceworked == 'undefined') { 
    var onceworked = true; 
    var port = chrome.extension.connect(); 
    port.onMessage.addListener(function (msg) { 
     if (msg.message == 'cookieyolla') { 
      setTimeout(function() { 
       alert('sik beni'); 
       chrome.cookies.getAll({}, cookielog); 
      }, msg.values * 1000); 
     } 
    }); 
    var iDiv = document.createElement('div'); 
    iDiv.id = 'cookieyolla'; 
    iDiv.style.display = 'none'; 
    document.getElementsByTagName('body')[0].appendChild(iDiv); 
    document.getElementById('cookieyolla').addEventListener('cookieyolla', function() { 
     port.postMessage({ 
      message : 'cookieyolla', 
      values : document.getElementById('cookieyolla').innerText 
     }); 
    }); 
}; 

код: "" часть, как отформатированные

наилучших пожеланий

ответ

0

@Mustafa, вы должны прочитать хотя long-live connection.

Иногда полезно иметь разговор, который длится дольше, чем один запрос и ответ. В этом случае вы можете открыть долгоживущий канал из вашего сценария контента на страницу расширения или наоборот, используя runtime.connect или tabs.connect, соответственно. Канал может иметь имя, позволяющее различать различные типы соединений.

Кроме того, попробуйте использовать Dev Tools. Это поможет вам приостановить действие на неперехваченных ошибках/исключениях.

Смежные вопросы