Javascript chrome.runtime.onmessage未启动
我不熟悉chrome扩展的编写,我尝试制作一个简单的扩展来控制YouTube视频的速度,但在编码的第一阶段,我希望看到这个扩展在背景脚本(发送消息)和内容脚本(接收消息)之间的通信.background成功发送消息,但内容脚本未接收到该消息。为什么? manifest.json: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
{
"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休眠时?请参阅。