chrome.runtime.onMessage.addListener在内容脚本中不起作用

chrome.runtime.onMessage.addListener doesn't work in content script

本文关键字:脚本 不起作用 runtime onMessage addListener chrome      更新时间:2023-09-26

在chrome扩展中,我尝试从后台脚本到内容脚本发送消息。我不会在内容脚本中收到消息。我哪里出错了?这是background.js

function createAlarm() {
   chrome.alarms.create('bookcab', {
          periodInMinutes: 1
   });
}
chrome.alarms.onAlarm.addListener(function(alarm) {
    if (alarm.name === 'bookcab') {
       var url = 'http://cab/';
       chrome.tabs.create({ url:url, active: true });
       chrome.tabs.query({active:true}, function(tabs){
          chrome.tabs.sendMessage(tabs[0].id, {"message": "sample_msg"});
        });
    }
});
createAlarm();

content_script.js有以下代码

chrome.runtime.onMessage.addListener(
  function(request,sender,sendresponse) {
    if( request.message === "sample_msg" ) {
       console.log('message from content script');                     
    }
  }
);

这是舱单。Json格式

{
    "manifest_version": 2,
    "name":"bookcab",
    "version":"0.1",
    "background": {
        "scripts":["background.js"]
    },
    "permissions": [
        "alarms",
        "tabs"
    ],
    "content_scripts": [{
        "matches":["<all_urls>"],
        "js": ["content_script.js"],
        "run_at" : "document_end"
    }]
}

我在向内容脚本发送消息之前包含了一个选项卡加载完成。

等待选项卡完全加载

chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {          
   if (changeInfo.status == 'complete') {   
      chrome.tabs.query({active: true}, function(tabs){
         chrome.tabs.sendMessage(tabs[0].id, {"message": "sample_msg"});
      }
   }
});