ОБНОВЛЕНИЕ
Насколько я могу судить, невозможно отправить сообщение из фонового сценария в сценарий содержимого с помощью функции "sendMessage". Однако есть ужасный обходной путь,
В файле window.onload вашего контентного скрипта отправьте сообщение фоновому скрипту:
chrome.runtime.sendMessage( { action: "messaging", window: "app" }, this.listenForFutureMessages );
Также в сценарии содержимого есть следующая функция:
listenForFutureMessages: function(someAction)
{
//Take some action based on the message
//If we want the background script to be able to contact
//us again, we need to give them another callback. This
//is because Chrome only allows one use per callback
chrome.runtime.sendMessage( { action: "messaging", window: "app" }, this.listenForFutureMessages );
},
В фоновом скрипте есть слушатель, который делает что-то вроде этого:
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse)
{
if ( request.action === "messaging" )
{
//Save the callback for later
this.listeners[ request.window ] = sendResponse;
//Tell chrome we will be using the callback later
return true;
}
}
);
Когда ваш фоновый скрипт хочет отправить скрипту содержимого сообщение, просто назовите его так:
this.listeners[ "app" ]( { someProperty: "some value" } );
Это глупый способ сделать это, но он действительно делает это возможным. Надеюсь, это поможет всем, кому нужна эта функция.
ОРИГИНАЛЬНЫЙ Я не могу отправить сообщение из фонового скрипта в скрипт содержания. Когда я пытаюсь найти идентификатор вкладки, он сообщает мне, что у меня нет разрешений, хотя у моего приложения есть это разрешение. И когда я получаю сообщение от сценария содержимого и распечатываю объект sender
, он показывает tab.id = -1
. API для отправки сообщения в сценарий содержимого требует идентификатора вкладки!
chrome.tabs.sendMessage (integer tabId, любое сообщение, функция responseCallback)
Ошибка:
chrome.tabs недоступен: у вас нет разрешения на доступ к этому API. Убедитесь, что требуемое разрешение или свойство манифеста включено в ваш manifest.json.
Ошибка в обработчике событий для undefined: невозможно вызвать метод sendMessage неопределенного TypeError: невозможно вызвать метод sendMessage из undefined в chrome-extension: //panoaieakcofaegcjfbmhndaekfgpijh/scripts/background.js: 109: 16 в Event.dispatchToListener ( event_bindings: 356: 21) в Event.dispatch_ (event_bindings: 342: 27) в Event.dispatch (event_bindings: 362: 17) в miscellaneous_bindings: 167: 33 в Event.dispatchToListener (event_bindings: 356: 21) в Event.dispatch_ ( event_bindings: 342: 27) в Event.dispatch (event_bindings: 362: 17) в Object.chromeHidden.Port.dispatchOnMessage (miscellaneous_bindings: 253: 22)
Итак, как мне связаться с моим сценарием контента? (У меня несколько окон, и мне нужно связаться с ними индивидуально)
Мой манифест:
{
"manifest_version": 2,
"name": "App",
"description": "App",
"version": "0.75",
"minimum_chrome_version": "27",
"offline_enabled": true,
"icons":
{
"16": "images/icon16.png",
"48": "images/icon48.png",
"128": "images/icon128.png"
},
"app":
{
"background":
{
"scripts":
[
"scripts/background.js"
]
}
},
"permissions":
[
"unlimitedStorage",
"fullscreen",
{
"fileSystem":
[
"write"
]
},
"background",
"<all_urls>",
"tabs"
],
"update_url": "http://192.168.1.121/app.xml"
}