У меня есть две функции в моем расширении контекстного меню. Я должен щелкнуть один, чтобы отправить сообщение в скрипт содержимого, а затем мне нужно щелкнуть другой, потому что функции sendMessage устанавливают переменные в моем фоновом скрипте. То, что я пытаюсь сделать, это просто сделать их одной кнопкой и сначала вернуть функцию sendMessage, а затем другая функция может это сделать, потому что теперь переменные установлены. Вот что я имею в виду:
В фоновом режиме. js
chrome.contextMenus.create({
title: "Send Message",
contexts: ["all"],
onclick: sendMessage
});
chrome.contextMenus.create({
title: "Get All",
contexts: ["all"],
onclick: getAll
});
var title;
var link;
var bp;
var imgSrc;
function sendMessage() {
chrome.tabs.query({
active: true,
currentWindow: true
}, function (tabs) {
chrome.tabs.sendMessage(tabs[0].id, {
req: "request"
}, function (response) {
console.log("responded");
title = response.title;
link = response.link;
bp = response.bp;
imgSrc = response.imgSrc;
});
});
};
function getAll(info) {
var el = document.createElement('textarea');
var all =
"<tr><td><img src=\"" + imgSrc + "\"></td>\n\
<td><span class =\"productTitle\">" + title + "</span></td>\n\
<td>" + bp.split("\n").slice(0, 5).map(i => '<span class="bulletPoints"><i class="fas fa-check" style="color: #5cb85c"></i> ' + i.substring(0, 90) + "...</span>").join("\n") + "</td>\n\
<td>[boombox_button tag_type=\"a\" type=\"success\" url=\"" + info.pageUrl.substring(0, link.indexOf("dp") + 14) + "\" target=\"blank\"]Check Price[/boombox_button]</td></tr>";
el.value = all;
document.body.appendChild(el);
el.select();
document.execCommand('copy');
}
В содержании. js
chrome.runtime.onMessage.addListener(
function (request, sender, sendResponse) {
if (request.req == "request")
sendResponse({
title: document.getElementById("productTitle").innerText,
link: window.location.href,
bp: document.getElementById("feature-bullets").innerText,
imgSrc: document.getElementById("imgTagWrapperId").getElementsByTagName('img')[0].src.toString().replace(/_.*_/, '_SX250_')
});
return true;
});
Я довольно новичок в Javascript, и мне было непросто пробовать разные вещи, такие как обратные вызовы, обещания, setTimeout, не уверен, правильно ли я их настраиваю, но я надеялся, что кто-то может указать мне правильное направление.