无法将消息从后台脚本发送到内容脚本

时间:2020-04-30 21:23:32

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

我正在尝试将消息从后台脚本发送到内容脚本,但它不起作用,尝试了我发现的多个解决方案,但是它们都不起作用。

我检查了后台脚本和内容脚本是否正常工作。

我尝试使用chrome.runtime \ extension以及消息和请求...

希望你能告诉我我做错了。

清单:

{
  "manifest_version": 2,
  "name": "ChangeLang",
  "description": "change written text lang",
  "version": "1.3",
  "permissions": ["storage", "contextMenus", "activeTab", "tabs"],

  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  },

  "browser_action": {
    "name": "Click to change the icon's color"
  },

  "content_scripts": [{
    "matches": ["<all_urls>"],
    "js": ["changelang.js"]
  }],

  "background": {
    "scripts": ["background.js"]
  }
}

background.js:

chrome.browserAction.onClicked.addListener(function(info, tab) {
  alert("click"); // this alert works
  chrome.tabs.sendMessage(tab.id, {
    "functiontoInvoke": "change"
  });
  alert("click"); // this alert doesn't works
});

content.js:

function changeLang() {
  // do something
}

chrome.runtime.onMessage.addListener(function(message, sender, callback) {
  alert("msg"); // never worked
  if (message.functiontoInvoke == "change") {
    changeLang();
  }
});

1 个答案:

答案 0 :(得分:-1)

我认为您的代码设置应如下所示:

chrome.browserAction.onClicked.addListener(function(info, tab) {
  alert("click"); // this alert works
  chrome.tabs.sendMessage(tab.id, {
    "functiontoInvoke": "change"
  }, function(response) {
         response.yourFunc();
     });
  alert("click"); // this alert doesn't works
});

chrome.runtime.onMessage.addListener(function(message, sender, callback) {
  alert("msg"); // never worked
  if (message.functiontoInvoke == "change") {
    callback({yourFunc: changeLang()});
  }
});