Chrome.Runtime.SendMessage不工作

时间:2017-06-22 06:44:16

标签: javascript google-chrome google-chrome-extension

我正在尝试创建一个简单的Chrome扩展程序,它将从页面中读取一些数据,在扩展程序图标上设置徽章计数,然后在弹出窗口中显示数据。但是我很难将我的内容脚本中的数据提供给我的背景js。

关于这一点,我已经看了很多关于这个的问题,在我看来,我做的一切都是正确的,但它仍然没有用。

这就是我所做的:

的manifest.json

{
  "name": "__MSG_appName__",
  "version": "0.0.1",
  "manifest_version": 2,
  "description": "__MSG_appDescription__",
  "icons": {
  "16": "images/icon-16.png",
  "128": "images/icon-128.png"
  },
  "default_locale": "en",
  "background": {
    "scripts": [
      "scripts.babel/chromereload.js",
      "scripts.babel/background.js"
    ]
  },
  "content_scripts" : [
    {
      "matches": ["http://localhost:9000/*"],
      "js":["scripts.babel/myscript.js"]
    }
  ],
   "permissions": [],
      "browser_action": {
       "default_icon": {
       "19": "images/icon-19.png",
       "38": "images/icon-38.png"
    },
    "default_title": "MiAssist",
    "default_popup": "popup.html"
  }
}

内容脚本:

myscript.js

"use strict";
var names = findNames();
sendNames(names);

function findNames()
{
  var names = [];
  //finds names..

  return names;
}

function sendNames(names)
{
  // Bind event:
  chrome.runtime.sendMessage(null, names, null,
    function(response) {
      // Do something
      ;
  });
}

background.js

'use strict';

chrome.runtime.onInstalled.addListener(details => {
  console.log('previousVersion', details.previousVersion);
});

// Bind event:
chrome.runtime.onMessage.addListener(
  function(names, sender, sendResponse) {
    console.log("background.js");
    if(names.length > 0)
    {
      chrome.browserAction.setBadgeText({text: names.length});
    }
});

所有这一切都行不通。永远不会到达onMessage匿名函数。

有人可以帮帮我吗?任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:1)

避免将null用于可选参数。如果你只需要一个消息和回调 - 只传递两个这个args。

我尝试使用我的评论进行编码并且有效:

chrome.runtime.sendMessage(names, 
  function(response) {
      console.log(response);
  }
);