2014-07-10 8 views
7

मैं अपने Google क्रोम एक्सटेंशन से पूरी तरह से एक wabpage को सहेजना चाहता हूं। मैंने "downloads", "<all_urls>" अनुमतियों को जोड़ा और पुष्टि की कि निम्न कोड Google पेज को google.html पर सहेजता है।क्या हम chrome.downloads.download के साथ पूरी तरह से एक वेबपृष्ठ डाउनलोड कर सकते हैं? (Google क्रोम एक्सटेंशन)

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

हालांकि, यह कोड केवल HTML फ़ाइल सहेजता है। स्टाइलशीट, स्क्रिप्ट और छवियां सहेजी नहीं जा सकती हैं। मैं वेबपृष्ठ को पूरी तरह से सहेजना चाहता हूं, जैसे कि मैं पृष्ठ को संवाद के साथ सहेजता हूं, Format: Webpage, Complete का चयन करता हूं।

मैंने document में देखा लेकिन मुझे कोई रास्ता नहीं मिला।

तो मेरा सवाल है: मैं Google क्रोम के एपीआई (एस) का उपयोग करके विस्तार से पूरी तरह से एक वेबपृष्ठ कैसे डाउनलोड कर सकता हूं?

उत्तर

8

downloads एपीआई केवल एक ही संसाधन डाउनलोड करता है। यदि आप एक पूर्ण वेब पेज को सहेजना चाहते हैं, तो आप पहले वेब पेज खोल सकते हैं, फिर इसे chrome.pageCapture.saveAsMHTML का उपयोग करके एमएचटीएमएल के रूप में निर्यात कर सकते हैं, -URL URL.createObjectURL का उपयोग करके निर्यात किए गए Blob के लिए और अंत में chrome.downloads.download API का उपयोग करके इस यूआरएल को सेव करें।

पेज कैप्चर एपीआई के लिए एक वैध टैब आईडी की आवश्यकता है। उदाहरण के लिए:

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

आज़माने के लिए, background.js में पिछले कोड डाल दिया,
manifest.json लिए अनुमतियां जोड़ने (नीचे के रूप में दिखाया गया है) और एक्सटेंशन को पुनः लोड। फिर example.com खोला जाएगा, और वेब पेज को स्वयं निहित MHTML फ़ाइल के रूप में सहेजा जाएगा।

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

आपकी सूचनात्मक टिप्पणी के लिए धन्यवाद। मैंने आपके कोड की कोशिश की और यह वास्तव में काम करता है। फिर भी सहेजी गई फ़ाइल उस रूप में नहीं थी जिसकी मैंने पहली बार अपेक्षा की थी, लेकिन एमएचटीएम प्रारूप का उपयोग करना एक अच्छा विचार है। धन्यवाद। – itchyny

+0

क्षमा करें, मैं stackoverflow के लिए उपयोग नहीं किया जाता है। एक बार फिर धन्यवाद। – itchyny

+0

@ rob-w मैं अपने ऐप में 'manifest_version = 2' का उपयोग कर रहा हूं। मेरा मानना ​​है कि यह क्रोम * ऐप्स * के लिए आवश्यक है। लेकिन डाउनलोड एपीआई क्रोम ऐप पर काम नहीं कर रहा है। यह आपके लिए कैसे काम कर रहा है? – user3677331

-1

नहीं, यह आपके लिए सभी फाइलें डाउनलोड नहीं करता है: छवियां, जेएस, सीएसएस इत्यादि आपको HTTRACK जैसे टूल का उपयोग करना चाहिए।

संबंधित मुद्दे