2014-07-10 23 views
7

Bir wab sayfasını Google Chrome uzantımdan tamamen kaydetmek istiyorum. "downloads", "<all_urls>" izinlerini ekledim ve aşağıdaki kodun Google sayfasını google.html'a kaydettiğini doğruladım. Bu kod yalnızca html dosyasını kaydeder. Ancak, bu kod yalnızca html dosyasını kaydeder. Ancak, bu kod yalnızca html dosyasını kaydeder. Stil sayfaları, komut dosyaları ve resimler kaydedilmez. Sayfayı, iletişim kutusuyla Format: Webpage, Complete'u seçerek kaydedersem web sayfasını tamamen kaydetmek istiyorum.Bir web sayfasını chrome.downloads.download ile tamamen indirebilir miyiz? (Google Chrome Uzantısı)

document ürününe baktım ama bir yol bulamadık.

Bu yüzden sorum şu: Google Chrome'un API'lerini kullanarak bir web sayfasını tamamen bir uzantıdan nasıl indirebilirim?

cevap

8

downloads API'si yalnızca tek bir kaynak indirir. Eğer tam bir web sayfası kaydetmek istiyorsanız, ilk önce web sayfasını açabilir, daha sonra chrome.pageCapture.saveAsMHTML kullanarak MHTML olarak dışa aktarabilir, URL.createObjectURL kullanarak Blob dışa aktarılan için blob: -URL oluşturun ve sonunda bu URL'yi chrome.downloads.download API kullanarak kaydedin.

pageCapture API'sı geçerli bir tabId gerektirir. Örneğin:

// Create new tab, wait until it is loaded and save the page 
chrome.tabs.create({ 
    url: 'http://example.com' 
}, function(tab) { 
    chrome.tabs.onUpdated.addListener(function func(tabId, changeInfo) { 
     if (tabId == tab.id && changeInfo.status == 'complete') { 
      chrome.tabs.onUpdated.removeListener(func); 
      savePage(tabId); 
     } 
    }); 
}); 

function savePage(tabId) { 
    chrome.pageCapture.saveAsMHTML({ 
     tabId: tabId 
    }, function(blob) { 
     var url = URL.createObjectURL(blob); 
     // Optional: chrome.tabs.remove(tabId); // to close the tab 
     chrome.downloads.download({ 
      url: url, 
      filename: 'whatever.mhtml' 
     }); 
    }); 
} 

, denemek için
(aşağıda gösterildiği gibi) manifest.json izinleri ekleyin ve uzantıyı yeniden, background.js önceki kod koydu. Sonra example.com açılacak ve web sayfası bağımsız bir MHTML dosyası olarak kaydedilecektir.

{ 
    "name": "Save full web page", 
    "version": "1", 
    "manifest_version": 2, 
    "background": { 
     "scripts": ["background.js"] 
    }, 
    "permissions": [ 
     "pageCapture", 
     "downloads" 
    ] 
} 
+0

Bilgilendirici yorumunuz için teşekkür ederiz. Kodunu denedim ve aslında işe yarıyor. Yine de kaydedilen dosya, öncelikle beklediğim formda değildi, ancak mhtml formatını kullanmak güzel bir fikir gibi geliyor. Teşekkür ederim. – itchyny

+0

Üzgünüz, yığın akışına alışkın değilim. Tekrar teşekkürler. – itchyny

+0

@ rob-w Uygulamamdaki 'manifest_version = 2' kullanıyorum. Bunun, krom * uygulamaları * için gerekli olduğuna inanıyorum. Ancak indirmeler api, krom uygulamalarında çalışmıyor. Bu senin için nasıl çalışıyor? – user3677331

-1

Hayır, sizin için tüm dosyaları indirmez: resimler, js, css vb. HTTRACK gibi araçları kullanmalısınız.

İlgili konular