Несколько основных вопросов:
- Вы зависите от какого-то элемента на странице с идентификатором
header
. Такие идентификаторы находятся на усмотрении дизайнера сайта, поэтому на самом деле они есть у очень немногих страниц (включая Google). Может быть, выберите что-то более универсальное, например заголовок страницы (document.title
).
- Что означает "кнопка расширения"? Если это означает действие браузера, это часть вашего расширения, поэтому вы правы, что хотите отправить что-то из фонового скрипта. Это также более простой случай, так как вполне вероятно, что (помимо вышеописанной проблемы отсутствия страниц Google с элементом ID
header
) вы просто не захватываете событие клика в браузере. Однако, если это какая-то вставленная кнопка, все наоборот.
Что вы хотите (версия действия в браузере)
background.html (встроенный):
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.getSelected(null, function(tab) {
chrome.tabs.sendRequest(tab.id, { method: "getHTML"}, function(response) {
console.log(response.data);
});
});
});
content_script.js
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
if (request.method === "getHTML") {
sendResponse({data: document.title});
} else {
sendResponse({});
}
});
Что вам может понадобиться (версия с внедренным нажатием кнопки)
фон.html:
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
if (request.method === "getHTML") {
console.log(request.data);
}
});
content_script.js:
function buttonClick() {
chrome.extension.sendRequest({method: "getHTML", data: document.title});
}
Код ответа на комментарий ниже
Очень важная рекомендация: справочник разработчика Chrome, вероятно, один из самых дружелюбных там. Если вы хотите узнать, какие части chrome.*
API доступны, начните с этого.
function getHtml(tabId) {
chrome.tabs.sendRequest(tabId, { method: "getHTML"}, function(response) {
console.log(response.data);
});
}
// Note that this will only work once a tab has loaded
chrome.tabs.onSelectionChanged.addListener(function(tabId) {
getHtml(tabId);
});
// This fires the first time a page is loaded
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo) {
if (changeInfo.status === "complete") {
getHtml(tabId);
}
});
Код для второго ответа на комментарий ниже
фон.html
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
if (request.method === "getHTML") {
console.log(request.data);
}
});
content_script.js
document.addEventListener("keypress", function(e) {
chrome.extension.sendRequest({method: "getHTML", data: e.which});
});
person
brymck
schedule
03.06.2011