Проверено и работает правильно:
вставьте
"permissions": [
"tabs"
],
в ваш манифест.
Затем в вашем background.js
chrome.extension.onRequest.addListener(
function(request, sender, sendResponse) {
// LOG THE CONTENTS HERE
console.log(request.content);
});
chrome.tabs.getSelected(null, function(tab) {
// Now inject a script onto the page
chrome.tabs.executeScript(tab.id, {
code: "chrome.extension.sendRequest({content: document.body.innerHTML}, function(response) { console.log('success'); });"
}, function() { console.log('done'); });
});
По сути, мы получаем текущую вкладку, запускаем на ней некоторый javascript, который получает innerHTML и передает его обратно нам.Мы интерпретируем ответ в обратном вызове соответствующим образом.
Обратите внимание, что это очень мало проверяет ошибки, поэтому вы можете захотеть освежить передачу сообщений и API вкладок .
Редактировать: я попробовал это, и он работает, как ожидалось.Попробуйте сами, просто создайте новое пустое расширение и дайте ему разрешение «вкладки» и фоновую страницу.Затем перейдите к проверке background.html из расширений chrome: // и перейдите в консоль.Скопируйте приведенный ниже код, установив вложение chrome.tabs.getSelected
на тайм-аут в несколько секунд.Когда вы нажмете Enter, чтобы выполнить JS, быстро перейдите на другую вкладку.Подождите, пока ваш тайм-аут.Затем вернитесь к проверке background.html.HTML-код страницы, по которой вы щелкнули, будет напечатан на консоли.
Другое правка. В общем, доступ к текущей вкладке DOM как к событию выглядит как плохая модель (возможно, поэтому нетотличный родной способ сделать это).Рассматривали ли вы использование chrome.tabs.onUpdated или сценариев содержимого для универсальных действий при загрузке / изменении DOM?