我添加了一个新的(弹出) 窗户
不是您在清单中注册的popup.html。
用户将信息放在窗口中,当他们单击按钮时,需要将信息发送到content.js脚本。
(弹出)窗口的html位于扩展包中,因此不需要在manifest.json中添加“manifest.json”对象,而且它也不是其他扩展的一部分,因此不使用sendMessageExternal方法。
Manifest.json
{
"name": "extension name",
"version": "0.1",
"options_page": "settings.html",
"manifest_version": 2,
"background": {
"scripts": ["background.js"],
"persistent": false
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"js":["jquery.min.js", "content.js"]
}
],
"browser_action": {
"default_popup": "popup.html",
"default_title": "Default title",
"default_icon": {
"16": "images/logo16.png",
"32": "images/logo32.png",
"48": "images/logo48.png",
"128": "images/logo128.png"
}
},
"icons": {
"16": "images/logo16.png",
"32": "images/logo32.png",
"48": "images/logo48.png",
"128": "images/logo128.png"
}
}Content.js
chrome.runtime.onMessage.addListener(function(req, sender, senderres){
if(req.succes == true){
// Do stuff...
}
});在(弹出)窗口中引用的js文件
window.onload = function(){
document.getElementById("BtnFinish").addEventListener('click',
function(){
chrome.runtime.sendMessage({succes: true});
self.close();
});
}这是我在background.js中用来创建(弹出)窗口的代码
chrome.windows.create({
url: chrome.runtime.getURL("form.html"),
type: "popup"
});我确实收到任何错误信息。该按钮工作,它激活每一点代码,但content.js没有收到任何东西。
如果你还需要更多的信息,或者我忘了什么,那就随便问吧。
发布于 2019-08-04 17:31:38
如果您查看一下文档,其中有一个子句:
请注意,扩展不能使用此方法向内容脚本发送消息。若要向内容脚本发送消息,请使用tabs.sendMessage。
这意味着你必须做这样的事情:
chrome.windows.getAll({populate:true}, (windows) => {
windows.forEach((window) => {
window.tabs.forEach((tab) => {
chrome.tabs.sendMessage(tab.id, {succes: true});
});
});
});要做到这一点,您将需要tabs权限。我之所以使用chrome.windows.getAll,是因为您似乎试图向另一个窗口中的内容脚本发送消息,而不是同一个窗口的不同选项卡。
https://stackoverflow.com/questions/57348738
复制相似问题