Расширение Chrome: связь между контентом script и background.html
Я новичок в расширениях Chrome. Я пытаюсь установить связь между содержимым script и background.html. Background.html отправляет запрос, "привет", в контент script, а содержимое script должно отвечать на предупреждение "hello background". Но это просто не происходит. Мой код background.html:
function testRequest() {
chrome.tabs.getSelected(null, function(tab) {
chrome.tabs.sendRequest(tab.id, {greeting: "hello"});
});
}
content.js код:
chrome.extension.onMessage.addListener(
function(request, sender, sendResponse) {
if (request.greeting == "hello")
alert("hello background");
}
);
popup.html код:
<!doctype html>
<html>
<head></head>
<body>
<form>
<input type="button" value="sendMessage" onclick="testRequest()" />
</form>
</body>
</html>
manifest.json:
{
"browser_action": {
"default_icon": "icon.png",
"popup": "popup.html"
},
"background": {
"page": "background.html"
},
"permissions": [
"tabs",
"http://*/*",
"https://*/*",
"notifications",
"contextMenus"
],
"content_scripts": [
{
"matches": ["http://*/*","https://*/*"],
"js": ["content.js"]
}
],
"name": "FirstExtension",
"version": "1.0"
}
Пожалуйста, помогите!
Ответы
Ответ 1
sendRequest
/onRequest
заменяется на sendMessage
/onMessage
в Chrome 20. *Message
- это не просто псевдоним для *Request
, это другой API.
Если вы хотите поддерживать Chrome < 20 (многие пользователи Ubuntu все еще находятся в Chromium 18, поскольку PPA не обновляется), используйте onRequest
и sendRequest
. В противном случае используйте методы *Message
.
Другая проблема заключается в том, что ваша функция находится на фоновой странице, и вызов выполняется во всплывающем окне. Это разные области, если вы хотите вызвать метод фоновой страницы из всплывающего окна, используйте chrome.extension.getBackgroundPage()
:
chrome.extension.getBackgroundPage().testRequest();
Заключительное примечание: вы используете манифеста 1 и встроенные обработчики событий. Эта практика устарела, для получения дополнительной информации см. http://code.google.com/chrome/extensions/manifestVersion.html.