2013-01-17 22 views
0

В настоящее время я разрабатываю расширение Chrome, в котором я должен получить HTML-источник страницы. В настоящее время я использую Chrome Messaging. Вот мой исходный код:Получить расширение источника страницы chrome

background.js

chrome.webNavigation.onComplete.addListener(function(e) { 
     chrome.tabs.sendRequest(e.tabId, { 
      action: 'getSource' 
     }, function(r) { 
      console.log(r); 
     }); 
}); 

contentscript.js

chrome.extension.onRequest.addListener(function(request, sender, callback) { 
    if (request.action == 'getSource') 
     callback(document.documentElement.outerHTML); 
}); 

Это довольно медленно, потому что я должен ждать, что каждые данные (например, изображения, JavaScript и т. д.) на странице были загружены, чтобы получить источник страницы.

Это еще один способ сделать что-то подобное? Спасибо.

ответ

2

Перемещение ждать логику манифеста:
Установите run_at свойство вашего скрипта содержимого в вашем файле манифеста для document_end.

Запустится сценарий содержимого после загрузки DOM, но до загружаются любые подресурсы (например, изображения).

В случае «document_end» файлы вводятся сразу после завершения DOM, но до того, как загрузились подресурсы, такие как изображения и кадры.

— документация Google

В вашем contentscript, отправьте HTML непосредственно на фоновый скрипт:

var html = document.documentElement.outerHTML; 
chrome.extension.sendMessage(null, html); 

Но обратите внимание, что впрыскивается JavaScript на странице может изменить HTML, таким образом, вы можете в конечном итоге с другим HTML, чем у вас в вашем браузере.

+0

Он отлично работает, спасибо. –

+0

@JeffreyMuller Добро пожаловать. На самом деле, я не запрограммировал хромированные расширения в течение нескольких месяцев, но * run_at * был моим первым предположением;) – ComFreek

Смежные вопросы