Edge Extension 不响应 runtime.onMessage.addListener()
Edge Extension does not respond to runtime.onMessage.addListener()
我一直在尝试在 Edge 平台上开发一些扩展。到目前为止进展顺利,直到我遇到障碍物。我的后台脚本中有一个方法可以生成上下文菜单,单击时会向上下文脚本发送一条消息。一切正常,除了上下文脚本没有显示调用事件侦听器的迹象。
这是我的代码:
manifest.json:
{
"name":"Edge",
"author":"Auth",
"version":"1.0",
"description":"none",
"permissions":["*://*/","tabs","bookmarks","unlimitedStorage","contextMenus"],
"browser_action":{
"default_icon":{
"20":"images/Edge.png",
"40":"images/Edge40.png"
},
"default_title":"Edge"
},
"background":{
"persistent":true,
"scripts":["back.js"]
},
"content_scripts":[{
"matches":["<all_urls>"],
"js":["cs.js"],
"run_at":"document_end"
}]
}
后台脚本:
browser.contextMenus.create({
id: "Show Notes",
title: "Show Notes",
contexts: ['link']
});
browser.contextMenus.create({
id:"Make Notes",
title:"Make Notes",
contexts:['all']
});
browser.contextMenus.onClicked.addListener(function(info, tab) {
alert("s")
alert(info.menuItemId)
alert(info.linkUrl)
browser.tabs.query({active: true}, function(tabs){
browser.tabs.getCurrent(function(tab){
browser.tabs.sendMessage(tab.id,{
"id":info.menuItemId,
"link":info.linkUrl
})
})
})
alert("sent")
});
内容脚本:
browser.runtime.onMessage.addListener(lis)
function lis(request, sender, sendResponse) {
alert("msg")
if(request.id=="Show Notes"){
alert("received")
note.style.display="block"
}
if(request.id=="Make Notes"){
note.style.display="block"
alert("received")
}
return true
}
后台脚本中的所有警报消息都可以正常工作,但内容脚本甚至一个弹出窗口都没有。
我已经阅读并尝试实施了很多答案,但没有一个有效。
可能出了什么问题?
谢谢!
由于 Edge 不支持 Promises,您将不得不依赖回调机制。请将您的 tabs.query
或 tabs.getCurrent
与 tabs.sendMessage
同步。对于给定的代码,您将在后台页面的控制台中看到一个错误 "id as undefined"。同步上述两种方法将有助于解决此问题。此外,manifest.json
中的 bookmark
权限也没有用,因为 Edge 当前不支持书签。 (只是想让你知道这个,以防你错过了)。
我一直在尝试在 Edge 平台上开发一些扩展。到目前为止进展顺利,直到我遇到障碍物。我的后台脚本中有一个方法可以生成上下文菜单,单击时会向上下文脚本发送一条消息。一切正常,除了上下文脚本没有显示调用事件侦听器的迹象。
这是我的代码: manifest.json:
{
"name":"Edge",
"author":"Auth",
"version":"1.0",
"description":"none",
"permissions":["*://*/","tabs","bookmarks","unlimitedStorage","contextMenus"],
"browser_action":{
"default_icon":{
"20":"images/Edge.png",
"40":"images/Edge40.png"
},
"default_title":"Edge"
},
"background":{
"persistent":true,
"scripts":["back.js"]
},
"content_scripts":[{
"matches":["<all_urls>"],
"js":["cs.js"],
"run_at":"document_end"
}]
}
后台脚本:
browser.contextMenus.create({
id: "Show Notes",
title: "Show Notes",
contexts: ['link']
});
browser.contextMenus.create({
id:"Make Notes",
title:"Make Notes",
contexts:['all']
});
browser.contextMenus.onClicked.addListener(function(info, tab) {
alert("s")
alert(info.menuItemId)
alert(info.linkUrl)
browser.tabs.query({active: true}, function(tabs){
browser.tabs.getCurrent(function(tab){
browser.tabs.sendMessage(tab.id,{
"id":info.menuItemId,
"link":info.linkUrl
})
})
})
alert("sent")
});
内容脚本:
browser.runtime.onMessage.addListener(lis)
function lis(request, sender, sendResponse) {
alert("msg")
if(request.id=="Show Notes"){
alert("received")
note.style.display="block"
}
if(request.id=="Make Notes"){
note.style.display="block"
alert("received")
}
return true
}
后台脚本中的所有警报消息都可以正常工作,但内容脚本甚至一个弹出窗口都没有。
我已经阅读并尝试实施了很多答案,但没有一个有效。 可能出了什么问题? 谢谢!
由于 Edge 不支持 Promises,您将不得不依赖回调机制。请将您的 tabs.query
或 tabs.getCurrent
与 tabs.sendMessage
同步。对于给定的代码,您将在后台页面的控制台中看到一个错误 "id as undefined"。同步上述两种方法将有助于解决此问题。此外,manifest.json
中的 bookmark
权限也没有用,因为 Edge 当前不支持书签。 (只是想让你知道这个,以防你错过了)。