2014-07-10 5 views
7

Ich möchte eine wabpage vollständig von meiner Google Chrome-Erweiterung speichern. Ich habe "downloads", "<all_urls>" Berechtigungen hinzugefügt und bestätigt, dass der folgende Code die Google-Seite unter google.html speichert.Können wir eine Webseite komplett mit chrome.downloads.download herunterladen? (Google Chrome Extension)

chrome.downloads.download(
      { url: "http://www.google.com", 
       filename: "google.html" }, 
      function (x) { console.log(x); }) 

Dieser Code speichert jedoch nur die HTML-Datei. Stylesheets, Skripte und Bilder werden nicht gespeichert. Ich möchte die Webseite vollständig speichern, als ob ich die Seite mit dem Dialog speichern würde, indem ich Format: Webpage, Complete auswähle.

Ich schaute in die document, aber ich konnte keinen Weg finden.

Also meine Frage ist: Wie kann ich eine Webseite vollständig von einer Erweiterung mit den API (s) von Google Chrome herunterladen?

Antwort

8

Die API downloads lädt nur eine einzelne Ressource herunter. Wenn Sie eine vollständige Webseite speichern möchten, können Sie zuerst die Webseite öffnen und dann als MHTML mit chrome.pageCapture.saveAsMHTML exportieren, eine blob: -URL für den exportierten Blob erstellen, indem Sie URL.createObjectURL verwenden und diese URL schließlich mit der API speichern.

Die pageCapture API benötigt eine gültige tabId. Zum Beispiel:

// 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' 
     }); 
    }); 
} 

Um auszuprobieren, setzen Sie den vorherigen Code in background.js,
die Berechtigungen manifest.json hinzufügen (siehe unten) und die Erweiterung neu zu laden. Dann wird example.com geöffnet und die Webseite wird als eigenständige MHTML Datei gespeichert.

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

Vielen Dank für Ihren informativen Kommentar. Ich habe deinen Code ausprobiert und es funktioniert tatsächlich. Doch die gespeicherte Datei war nicht in der Form, die ich zuerst erwartet hatte, aber das MHTML-Format klingt nach einer netten Idee. Vielen Dank. – itchyny

+0

Entschuldigung, ich bin nicht an Stackoverflow gewöhnt. Danke noch einmal. – itchyny

+0

@ rob-w Ich benutze die 'manifest_version = 2' in meiner App. Ich glaube, dass dies für die Chrome * -Apps erforderlich ist. Aber die Downloads API funktioniert nicht auf Chrome-Apps. Wie funktioniert das für dich? – user3677331

-1

Nein, es werden nicht alle Dateien heruntergeladen: Bilder, js, css usw. Sie sollten Tools wie HTTRACK verwenden.

Verwandte Themen