2013-03-22 51 views
0

我试图构建一个扩展,它将popup.html的数据发送到标签圆顶,但我无法获得sendMessage的工作,不明白为什么。 我跟随此理念为指导:https://developer.chrome.com/extensions/messaging.htmlChrome扩展从popup.html到content.js不工作的sendMessage

这里有我的消息来源:

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'中,但我没有在督察控制台中看到任何东西。我怀疑文件是否被加载。 – 2013-03-22 11:54:55

回答

0

好吧,我很愚蠢...... 错误的是...我正在看的检查员页面。 “console.log”内的content.js打印在TAB INSPECTOR CONSOLE不在扩展名之一!

我希望它能帮助别人。

0

哎呀,我觉得你只是将消息发送到popup.js本身......

getSelected在popup.js听弹出标签的活动(这是在铬太选项卡) 因此,标签ID实际上是弹出选项卡,而不是您的content.js插入的选项卡

BTW getSelected已被弃用。尝试替代品? http://developer.chrome.com/extensions/tabs.html#method-getCurrent

+0

这很奇怪,getSelected位于Google放入消息传递指南的示例中,并且如果我切换tab'console.log(“popup.js> tab id:”+ tab.id)'返回一个不同的数字。如果id引用popup.html,则切换制表符时打印的值不应更改。此外,在getCurrent引用中它说:“如果从非选项卡上下文(例如:背景页面或弹出视图)调用,可能未定义。”这是我的情况。 – 2013-03-22 10:32:52

相关问题