Javascript chrome.runtime.onmessage未启动

Javascript chrome.runtime.onmessage未启动,javascript,google-chrome-extension,youtube,Javascript,Google Chrome Extension,Youtube,我不熟悉chrome扩展的编写,我尝试制作一个简单的扩展来控制YouTube视频的速度,但在编码的第一阶段,我希望看到这个扩展在背景脚本(发送消息)和内容脚本(接收消息)之间的通信.background成功发送消息,但内容脚本未接收到该消息。为什么? manifest.json: { "manifest_version":2, "version":"1", "name":"youtu

我不熟悉chrome扩展的编写,我尝试制作一个简单的扩展来控制YouTube视频的速度,但在编码的第一阶段,我希望看到这个扩展在背景脚本(发送消息)和内容脚本(接收消息)之间的通信.background成功发送消息,但内容脚本未接收到该消息。为什么?

manifest.json:

{
    "manifest_version":2,
    "version":"1",
    "name":"youtube playback speed controller",
    "description":"this extention controll the playback speed of youtube vidz",
    "icons": {
        "128":"image/x.png",
        "64":"image/x.png",
        "16":"image/x.png"},
        "background":{
        "scripts":["background.js"],
        "persistent":false
    },
    "content_scripts": [
        {
            "matches": ["*://www.youtube.com/*"],
            "js" : ["content.js"]
        } 
    ],
    "page_action": {
        "default_icon": {
           "16": "image/x.png",
           "24": "image/x.png",
           "32": "image/x.png",
           "128": "image/x.png"
        },
        "default_title": "Youtube playback speed",
        "default_popup": "popup.html"
     },
     "commands": {
        "speedUp": {
          "suggested_key": {
            "windows": "Ctrl+Right",
              
              "linux": "Ctrl+Right"
          },
          "description": "speedup" 
        },
        "slowDown": {
          "suggested_key": {
            "windows": "Ctrl+Left",
            
              
              "linux": "Ctrl+Left"
            
          },
          "description": "slow down" 
        }
       
      },
    
    
     "permissions":[
        "tabs",
        "https://www.youtube.com/*"
    ]
}
background.js:

var playbackspeed=0.5;
函数speedhandler(命令){
如果(命令=='speedUp')
{
回放速度+=0.1;
}else if(命令=='slood'){
playbackspeed-=0.1;
}
}
chrome.commands.onCommand.addListener(函数(命令)){
speedhandler(命令)
如果(播放速度>1 |播放速度<0)
{ 
警报(“您所需的播放速度不在正常范围内”);
回放速度=0.5;
}
查询({active:true,currentWindow:true},函数(tabs){
chrome.tabs.sendMessage(tabs[0].id,{x:'changeit'},函数(){
警报('已发送消息')
})
})        
});
content.js:

chrome.runtime.onMessage.addListener(函数(responsew、call、sendresponse){
警报('on message fired')
if(responsew.x==“changeit”)
{
警报('消息匹配')
}
})
试试这个:

manifest.json

{
  "manifest_version": 2,
  "version": "1",
  "name": "youtube playback speed controller",
  "description": "this extention controll the playback speed of youtube vidz",
  "background": {
    "scripts": [
      "background.js"
    ],
    "persistent": false
  },
  "content_scripts": [
    {
      "matches": [
        "*://www.youtube.com/*"
      ],
      "js": [
        "content.js"
      ]
    }
  ],
  "commands": {
    "speedUp": {
      "suggested_key": {
        "windows": "Ctrl+Right",
        "linux": "Ctrl+Right"
      },
      "description": "speedup"
    },
    "slowDown": {
      "suggested_key": {
        "windows": "Ctrl+Left",
        "linux": "Ctrl+Left"
      },
      "description": "slow down"
    }
  },
  "permissions": [
    "tabs",
    "https://www.youtube.com/*"
  ]
}
background.js

var playbackspeed = 0.5;
function speedhandler(command) {
    if (command == 'speedUp') {
        playbackspeed += 0.1;
    } else if (command == 'slowDown') {
        playbackspeed -= 0.1;
    }
}
chrome.commands.onCommand.addListener(function (command) {
    speedhandler(command);
    if (playbackspeed > 1 | playbackspeed < 0) {
        alert('your desired playback speed is not in normal range');
        playbackspeed = 0.5;
    }
    chrome.tabs.query({ active: true, currentWindow: true }, (tab) => {
        chrome.tabs.sendMessage(tab[0].id, { msg: "changeit" }, (response) => {
        })
    });
});


console.log("inside content js")
chrome.runtime.onMessage.addListener(
    function (request, sender, sendResponse) {
        if (request.msg == "changeit") {
            alert("command pressed")
            sendResponse({ response: "success" });
            return true;
        }
    });

试试这个:

manifest.json

{
  "manifest_version": 2,
  "version": "1",
  "name": "youtube playback speed controller",
  "description": "this extention controll the playback speed of youtube vidz",
  "background": {
    "scripts": [
      "background.js"
    ],
    "persistent": false
  },
  "content_scripts": [
    {
      "matches": [
        "*://www.youtube.com/*"
      ],
      "js": [
        "content.js"
      ]
    }
  ],
  "commands": {
    "speedUp": {
      "suggested_key": {
        "windows": "Ctrl+Right",
        "linux": "Ctrl+Right"
      },
      "description": "speedup"
    },
    "slowDown": {
      "suggested_key": {
        "windows": "Ctrl+Left",
        "linux": "Ctrl+Left"
      },
      "description": "slow down"
    }
  },
  "permissions": [
    "tabs",
    "https://www.youtube.com/*"
  ]
}
background.js

var playbackspeed = 0.5;
function speedhandler(command) {
    if (command == 'speedUp') {
        playbackspeed += 0.1;
    } else if (command == 'slowDown') {
        playbackspeed -= 0.1;
    }
}
chrome.commands.onCommand.addListener(function (command) {
    speedhandler(command);
    if (playbackspeed > 1 | playbackspeed < 0) {
        alert('your desired playback speed is not in normal range');
        playbackspeed = 0.5;
    }
    chrome.tabs.query({ active: true, currentWindow: true }, (tab) => {
        chrome.tabs.sendMessage(tab[0].id, { msg: "changeit" }, (response) => {
        })
    });
});


console.log("inside content js")
chrome.runtime.onMessage.addListener(
    function (request, sender, sendResponse) {
        if (request.msg == "changeit") {
            alert("command pressed")
            sendResponse({ response: "success" });
            return true;
        }
    });


在StackOverflow上不鼓励只发布代码答案,但至少要用几句话来解释您认为的问题以及解决问题的方法。在StackOverflow上不鼓励只发布代码答案,而至少要用几句话来解释您认为的问题以及解决问题的方法。我想您没有这样做编辑/重新加载扩展名后重新加载youtube选项卡,因为代码没有问题。您可能希望在更新()时显式切换到或重新导入内容脚本。唯一的问题是,每次后台脚本休眠时,您的playbackspeed都会重置,因此您需要使用
chrome.storage
。当background.js休眠时?请参阅。我猜您在编辑/重新加载扩展后没有重新加载youtube选项卡,因为代码很好。您可能希望在更新()时显式切换到或重新导入内容脚本。唯一的问题是,每次后台脚本休眠时,您的playbackspeed都会重置,因此您需要使用
chrome.storage
。background.js休眠时?请参阅。