Расширение Chrome: захват содержимого DOM для анализа - PullRequest
11 голосов
/ 04 октября 2011

Я разрабатываю расширение Chrome для моего босса, которое просто сканирует DOM на фразы.

Единственная вещь, в которой мне нужна помощь, это захват содержимого DOM с помощью всплывающего окна, я не могу найти способвернуть содержимое текущей вкладки.

1 Ответ

23 голосов
/ 04 октября 2011

Проверено и работает правильно:

вставьте

"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?

...