Расширение Chrome Отправить Сообщение Из Фона.сценарий JS to Content
Я прочитал документацию о том, как это сделать Отправить сообщение из фонового файла javascript (main.js) в сценарий содержимого (content.в JS) но я не могу заставить onMessage открыть мое предупреждение.
Манифест.в JSON
{
"name": "Example",
"version": "1.0.1",
"manifest_version" : 2,
"description": "Example Description",
"background" : {
"scripts" : ["main.js"]
},
"page_action" : {
"default_icon": {
"19": "icons/19.png",
"38": "icons/38.png"
},
"default_title" : "Example Title"
},
"content_scripts": [{
"matches": ["<all_urls>"],
"js": ["lib/jquery-1.8.3.min.js","scripts/content.js"],
"run_at": "document_idle",
"all_frames": false
}],
"permissions": [
"tabs",
"geolocation"
],
"icons": {
"16": "icons/16.png",
"48": "icons/48.png",
"128": "icons/48.png"
}
}
фоновый файл javascript (main.в JS)
chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
chrome.tabs.sendMessage(tabs[0].id, {action: "SendIt"}, function(response) {});
});
содержимое файла javascript (content.в JS)
chrome.extension.onMessage.addListener(function(msg, sender, sendResponse) {
if (msg.action == 'SendIt') {
alert("Message recieved!");
}
});
3 ответов
благодаря проницательности @Teepeemm я включил завершение загрузки вкладки перед отправкой сообщения в сценарий содержимого.
ПОДОЖДИТЕ, ПОКА ВКЛАДКА БУДЕТ ПОЛНОСТЬЮ ЗАГРУЖЕНА
chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {
if (changeInfo.status == 'complete') {
chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
chrome.tabs.sendMessage(tabs[0].id, {action: "SendIt"}, function(response) {});
});
}
});
если у вас каждый скрипт объявляет о своем присутствии (я предпочитаю console.log
to alert
), вы видите, что фоновый скрипт выполняется один раз (при установке или запуске), в то время как сценарий содержимого выполняется с каждой новой страницей. Это означает, что вы хотите, чтобы какое-то внешнее событие вызвало сообщение. Что-то вроде
chrome.pageAction.onClicked.addListener(function(tab) {
chrome.tabs.sendMessage(tab.id,{action:"SendIt"});
});
и не забудьте позвонить chrome.pageAction.show(tabId);
по мере необходимости.