2013-03-22 2 views
0

Я пытаюсь создать расширение, которое отправляет данные из popup.html в купол вкладки, но я не могу заставить sendMessage работать, и я не могу Не понимаю почему. Я следую это СНИМИТЕ: https://developer.chrome.com/extensions/messaging.htmlChrome Extension sendMessage от popup.html до content.js не работает

здесь мои источники:

manifest: 
{ 
    "manifest_version": 2, 
    "name": "OMG Campaign Preview Maker", 
    "description": "Easy OMG Campaign Preview Maker", 
    "background": { "scripts": ["background.js"]}, 
    "version": "0.1", 
    "content_scripts": [ 
     { 
      "matches": ["http://*/*", "https://*/*"], 
      "js": ["jquery-1.7.min.js", "content.js"] 
     } 
    ], 
    "browser_action": { 
     "default_icon": "logo_128.jpg", 
     "popup": "popup.html", 
     "default_popup": "popup.html" 
    }, 
    "icons": { 
     "128": "logo_128.jpg" 
    } 
} 

popup.html

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<script type="text/javascript" src="jquery-1.7.min.js"></script> 
<script type="text/javascript" src="popup.js"></script> 
</head> 
<body> 
<h1>Clicks</h1> 
<p>extra1: 
    <input type="text" name="extraclicks[]" id="extra1"> 
    <br> 
    extra2: 
    <input type="text" name="extraclicks[]" id="extra2"> 
    <br> 
    extra3: 
    <input type="text" name="extraclicks[]" id="extra3"> 
    <br> 
    <br> 
    <input type="submit" name="sendclicks" id="sendclicks" value="Invia Clicks"> 
</p> 
</body> 
</html> 

popup.js

function sendClicks(){ 
    console.log("popup.js > sendClicks()"); 
    var clicksArr = new Array(); 

    $("input[name='extraclicks\\[\\]']").each(function(i, value){ 
     clicksArr.push($(this).val()); 
    }); 

    chrome.tabs.getSelected(null, function(tab) { 
     console.log("popup.js > tab id: "+tab.id) 
     chrome.tabs.sendMessage(tab.id, {type:"clicks" }, 
      function(response) { 
       console.log(response.msg); 
      } 
     ); 
    }); 
    console.log("avra' inviato?"); 
} 

$(function(){ 
    console.log("popup.js > OMD Extension ready"); 
    $('#sendclicks').click(function(){sendClicks();}); 
}); 

content.js

chrome.extension.onMessage.addListener(function(request, sender, sendResponse) { 
    console.log("content.js > onMessage"); 

    if (request.type == 'clicks') { 
     console.log("content.js > clicks"); 
     sendResponse({msg: "success"}); 
    } 
}); 

Хотя я прекрасно вижу журналы, связанные с popup.js в консоли, я не вижу ни одного из журналов, запущенных content.js. Что я делаю неправильно?

+0

Я попытался написать 'console.log (« Я здесь »);' в 'content.js', но я ничего не вижу в консоли инспектора. Я сомневаюсь, что файл загружен вообще. –

ответ

0

Хорошо, я глуп ... Неверная вещь была ... страница инспектора, которую я наблюдал. «console.log» внутри content.js печатает на TAB INSPECTOR CONSOLE не на удлинителе!

Я надеюсь, что это поможет другим.

0

упс, я думаю, вы просто отправить сообщение popup.js себя ...

getSelected в popup.js слушать активность вкладки всплывающего (это вкладка в хроме тоже) таким образом, вкладка идентификатор на самом деле является всплывающей вкладкой, а не вкладкой, где вставлены ваши content.js.

BTW getSelected устарел. Попробуйте альтернативы? http://developer.chrome.com/extensions/tabs.html#method-getCurrent

+0

странно, getSelected находится в примерах, которые google помещает в свое руководство для обмена сообщениями, и, кстати, если я переключу вкладку 'console.log (" popup.js> tab id: "+ tab.id)' возвращает другое число , Если идентификатор ссылается на popup.html, то при переключении вкладок значение печати не должно меняться. Более того, в ссылке getCurrent говорится: «Может быть неопределенным, если вызывается из контекста без табуляции (например, фоновая страница или всплывающее представление)». это мой случай. –

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