Я разрабатываю расширение Chrome, которое просто сканирует DOM на наличие фраз.
Единственное, с чем мне нужна помощь, это захват содержимого DOM с помощью всплывающего окна, я не могу найти способ вернуть содержимое текущей вкладки.
Я разрабатываю расширение Chrome, которое просто сканирует DOM на наличие фраз.
Единственное, с чем мне нужна помощь, это захват содержимого DOM с помощью всплывающего окна, я не могу найти способ вернуть содержимое текущей вкладки.
Проверено и работает корректно:
помещать
"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://extensions и перейдите в консоль. Скопируйте приведенный ниже код, установив вложенность chrome.tabs.getSelected
на тайм-аут в несколько секунд. Когда вы нажимаете Enter, чтобы выполнить JS, быстро перейдите на другую вкладку. Дождитесь своего тайм-аута. Затем вернитесь к проверке background.html. HTML-код страницы, на которую вы щелкнули, будет напечатан на консоли.
Другое редактирование: в общем, доступ к текущей вкладке DOM как к событию кажется плохой моделью (вероятно, поэтому нет отличного собственного способа сделать это). Рассматривали ли вы возможность использования chrome.tabs.onUpdated или скрипты контента, чтобы универсально что-то делать при загрузке/изменении DOM?
LOG THE CONTENTS HERE
).
- person Alex Churchill; 04.10.2011
tab = tab.id
, а затем снова tab.id
— правильно?
- person Nakilon; 22.04.2012
manifest.json
, так как большинство людей прибегают к поиску в Google и понятия не имеют, с чего начать, Ссылка 1 , Ссылка 2 { "manifest_version": 2, "name": "MyExtension", "version": "1", "permissions": [ "tabs" ], "background": { "scripts": ["background.js"] }, "content_scripts": [ { "matches": ["https://*.stackoverflow.com/*"],"js": ["contentScript.js"] } ], "browser_action": { "default_icon": "icon.png", "default_popup": "popup.html" } }
- person Salem; 03.09.2020