В веб-выражении для firefox я попытался с помощью следующего кода отправить сообщение из моего фонового скрипта на панель боковой панели.js:
let url = browser.runtime.getURL("/sidebar/panel.html");
if (logToConsole) console.log(`Panel url for EXIF tags is ${url}`);
browser.sidebarAction.setPanel({panel: url});
browser.sidebarAction.setTitle({title: "EXIF tags"});
browser.sidebarAction.open()
.then(()=>{
browser.tabs.query({currentWindow: true})
.then((tabs)=>{
sendMessageToTabs(tabs, {"action": "displayExifTagsInSidebar", "data": {"imageUrl": imageUrl, "imageTags": imageTags}});
})
.catch((err)=>{
if (logToConsole) console.error(err);
});
})
.catch((err)=>{
if (logToConsole) console.error(err);
});
Это привело к следующей ошибке:
" Ошибка:" Не удалось установить соединение. Получающий конец не существует."
sendMessageToTab moz-extension: //c74377ac-91c8-c043-87f9-5021b480dcec/scripts/background.js: 1084: 13 "
До этого у меня была такая же проблема, когда я пытался использовать browser.runtime.sendMessage (message) вместо browser.tabs.sendMessage (tabId, message).
Файл panel.html, который должен быть загружен на боковой панели, выглядит следующим образом:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="../styles/panel.css"/>
</head>
<body>
<div id = "content"></div>
<script src="../scripts/panel.js"></script>
</body>
</html>
, а panel.js содержит обработчик сообщений следующим образом:
/// Message handlers
browser.runtime.onMessage.addListener(handleMessage);
function handleMessage(message) {
let action = message.action;
let imageUrl = message.data.imageUrl;
let imageTags = message.data.imageTags;
switch (action) {
case "displayExifTagsInSidebar":
createExifTagsPage(imageUrl, imageTags);
break;
default:
break;
}
}
function createExifTagsPage(imageUrl, imageTags){
// more code here... not relevant!
}