Как отправить сообщение из фонового скрипта в скрипт боковой панели, используя JavaScript в расширении Firefox - PullRequest
0 голосов
/ 17 марта 2019

В веб-выражении для 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!
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...