У меня есть расширение, с фоном сценария:Как мне установить связь между background.js и popup.js?
"background": {
"scripts": ["scripts/background.js"]
},
и сценарий содержания:
"content_scripts": [
{
"matches": ["*://*/*"],
"js": ["scripts/content_script.js"]
}
],
всплывающее окно (popup.html)
и всплывающий сценарий (popup.js)
. popup.js не регистрируется в манифесте, и он имеет дело с popup.html look и прослушивает действия пользователя, сделанные в popup.html, например, нажатие кнопки.
Я хочу сделать расширение, какие письма на текущей вкладке Страница, и для этого мне нужно, чтобы получить страницу DOM с content_script
, передавать данные (DOM) к background script
. После этого, когда пользователь запускает событие в popup.html, popup.js ловит это событие, и я хочу, чтобы popup.js мог получить переданные данные (DOM) из background.js. Как я могу это сделать? Итак, мой вопрос: как мне установить связь между background.js и popup.js?
Я нашел ответ на мой собственный вопрос:
Благодаря Elvis, я думаю, что решить эту проблему; Мне нужно только, чтобы получить DOM сайта в сценарии контента, но решение на мой вопрос был таков:
content_script.js
// SEND DOM structure to the background page
chrome.extension.sendRequest({dom: "page DOM here"});
background.html
<html>
<head>
<script>
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
if(request.dom != "")
var theDOM = request.dom;
console.log(request.dom); // page DOM here -> works
chrome.extension.sendRequest({theDOM: theDOM}); // theDOM : "page DOM here"
});
</script>
</head>
<body>
</body>
</html>
всплывающее окно .js
var dom;
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
if(request.theDOM != ""){
console.log("popup request: "+request.theDOM);
dom = request.theDOM;
}
});
// HANDLE TAB_1 REQUESTS (EMAIL PAGE)
// ---------------------------------
$("#send").click(function(){
console.log(dom); // page DOM here
}
Спасибо за помощь;)
Спасибо, я уже читал эту статью в документации , и уже вставлен в мой код, но две проблемы все еще существуют - это только обмен сообщениями между 'contentscript' и' backgroundscript', а не между 'backgoundscript' и' popup.js'. Обратите внимание: у меня есть 3 скрипта, 1 контент, 1 фон и 1 для редактирования popup.htmls. - другая проблема, что в консоли, я не вижу предупреждения/текста, поэтому разбор сообщений не работает на меня. -> Мне нужно вызвать событие для отправки запроса? –
Когда событие запускается во всплывающем окне, вы можете обмениваться информацией с фоном так же, как указано в ответе (т. Е. С помощью chrome.extension.sendRequest), и фон может возвращать нужные ему данные. –
Ох, как только я сменил background.js на background.html, разбор сообщений начал работать, одна проблема решена :) ** Элвис **: хорошо, я даю ему попробовать, спасибо –