javascript - Chrome 扩展 : Message passing confusion

标签 javascript google-chrome google-chrome-extension message-passing

我正在尝试将页面上选中的项目数发送到弹出窗口。弹出窗口上的 add 输入按钮会提醒或向控制台发送网页上选中的复选框数量。

我的脚本没有这样做,我认为消息传递的工作方式可能存在混淆。这是我所拥有的:

list :

{
  "name": "A plugin for...",
  "version": "1.0",
  "background_page": "background.html",
  "permissions": [
    "tabs", "http://*/*", "https://", "*"
  ],
  "content_scripts": [
    {
      "matches": ["http://*/*","https://*/*"],
      "js": ["main_content_script", jquery.min.js", "json.js"]
    }
  ],
  "browser_action": {
      "name": "Plugin",
      "default_icon": "icon.png",
      "popup": "popup.html"
  }
}

Popup.html

<html>
<script src="jquery.min.js"></script>
<script>
$(document).ready(function() {

    $('#add').click(function(){
        add();
        alert("add clicked"); 
    });

    $('#save').click(function(){
        alert("save clicked"); 
    });

    $('#delete').click(function(){
       alert("delete clicked"); 
    });
});
</script>

<script>

    //chrome.tabs.sendRequest(integer tabId, any request, function responseCallback)
    //chrome.extension.onRequest.addListener(function(any request, MessageSender sender, function sendResponse) {...}));

    function add(){
       chrome.extension.onRequest.addListener(function(request, sender, sendResponse)
              console.log(request.count); //? nothing in console
        });
</script>

<form action="http://www.xxxxx.com/xxxxx/xxxx/session.php" method="post" enctype="text/plain">
<input type="submit" value="Add" name="add" id="add"/>
<input type="submit" value="Save" name="save" id="save"/>
<input type="submit" value="Delete" name="delete" id="delete"/>
</form>
</html>

ma​​in_content_script.js

$(document).ready(function() {

 //var location = window.location.href;
 var checked = $('input:checkbox:checked').length;

    if(checked > 0){

        var values = $('input:checkbox:checked').map(function () {
            //return $(this).parent().next().html(); --> returns the name
            var strong_tag = $(this).parent().next().html();
            var link_tag = $(strong_tag + 'a').html();
            return $(link_tag).attr('href');
            }).get();

    } else {

        return false;

    }

    if(values){
    var count = values.length;
    alert(count + " values selected: " + values);
        chrome.extension.sendRequest({count:count}, function(response) {
            console.log('count sent');  
        });

});

最佳答案

chrome.extension.onRequest不能在 popup 中使用。它将在后台页面中使用。

背景页

var count=0;  //"count" is outside of any function
chrome.extension.onRequest(function(request, sender, sendResponse){
          count=request.count;
          console.log(request.count);
});

Popup - 使用 chrome.extension.getBackgroundPage()取回变量。

var count = chrome.extension.getBackgroundPage().count;  //get it back
alert("There are "+count+" checkboxes checked.");  //Voilà!

关于javascript - Chrome 扩展 : Message passing confusion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7535997/

相关文章:

javascript - 尝试遍历包含对象数组的数组,以匹配数据

google-chrome - 在 Chrome 开发者工具中调试时跳过行

javascript - 尽管使用本地存储,Chrome 扩展程序仍要求打开同步

google-chrome - Chrome 扩展修改用户代理

javascript - D3 中带圆圈的两行

javascript - 额外传奇礼物

javascript - 网页在 google-chrome 上显示异常

google-chrome-extension - Google Chrome 扩展入门教程不​​起作用

javascript - 在新插入的元素上应用 javascript 库

javascript - jQuery remove() 或 after() 导致空格被删除