2014-07-10 15 views
7

Tôi muốn lưu hoàn toàn trang wabpage từ tiện ích Google Chrome của mình. Tôi đã thêm quyền truy cập "downloads", "<all_urls>" và xác nhận rằng mã sau lưu trang Google vào google.html.Chúng tôi có thể tải xuống hoàn toàn trang web bằng chrome.downloads.download không? (Tiện ích mở rộng của Google Chrome)

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

Tuy nhiên, mã này chỉ lưu tệp html. Biểu định kiểu, tập lệnh và hình ảnh không được lưu. Tôi muốn lưu trang web hoàn toàn, như thể tôi lưu trang bằng hộp thoại, chọn Format: Webpage, Complete.

Tôi đã xem xét document nhưng tôi không thể tìm thấy cách nào.

Vì vậy, câu hỏi của tôi là: làm thế nào tôi có thể tải xuống hoàn toàn trang web từ tiện ích mở rộng bằng cách sử dụng api (s) của Google Chrome?

Trả lời

8

API downloads chỉ tải xuống một tài nguyên duy nhất. Nếu bạn muốn lưu trang web hoàn chỉnh, thì trước tiên bạn có thể mở trang web, sau đó xuất nó dưới dạng MHTML bằng cách sử dụng chrome.pageCapture.saveAsMHTML, tạo blob: -URL cho xuất khẩu Blob bằng cách sử dụng URL.createObjectURL và cuối cùng lưu URL này bằng API chrome.downloads.download.

API pageCapture yêu cầu tabId hợp lệ. Ví dụ:

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

Để thử ra, đặt mã trước đó trong background.js,
thêm các điều khoản để manifest.json (như hình dưới đây) và lại tiện ích. Sau đó example.com sẽ được mở và trang web sẽ được lưu dưới dạng tệp MHTML khép kín.

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

Cảm ơn bạn đã bình luận thông tin. Tôi đã thử mã của bạn và nó thực sự hoạt động. Tuy nhiên, các tập tin đã lưu không phải là trong hình thức tôi trước hết mong đợi, nhưng sử dụng định dạng mhtml âm thanh như một ý tưởng tốt đẹp. Cảm ơn bạn. – itchyny

+0

Xin lỗi, tôi không quen với stackoverflow. Cảm ơn một lần nữa. – itchyny

+0

@ rob-w Tôi đang sử dụng 'manifest_version = 2' trong ứng dụng của mình. Tôi tin rằng điều này là bắt buộc đối với ứng dụng * chrome *. Nhưng api tải xuống không hoạt động trên các ứng dụng chrome. Làm thế nào mà làm việc cho bạn? – user3677331

-1

Không, nó không tải xuống cho bạn tất cả các tệp: hình ảnh, js, css, v.v. Bạn nên sử dụng các công cụ như HTTRACK.

Các vấn đề liên quan