загрузка переменной блоба javascript в формате mhtml - PullRequest
1 голос
/ 12 февраля 2012

Я пишу расширение Google Chrome, которое использует

chrome.pageCapture.saveAsMHTML(object details, function callback)
function callback (blob mhtmlData) {...};

http://code.google.com/chrome/extensions/dev/pageCapture.html

, в котором в основном хранится блоб-представление mhtml-страницы в переменной.

Теперь я хочу позволить пользователю загрузить эту переменную BLOB-объекта в виде файла mhtml ..

Я пробовал это, но он дает мне файл размером 200 КБ, заполненный случайными символами.

chrome.pageCapture.saveAsMHTML({tabId: sender.tab.id}, function callback(mhtml){

    var reader = new FileReader();
    reader.readAsDataURL(mhtml);

    reader.onload = function(e) {
        window.open(e.target.result);
    }


}); 

1 Ответ

4 голосов
/ 12 февраля 2012

Ниже приведен код, который я вставил во всплывающее окно действий на странице. Я оставил материал, который не использовал, но закомментировал его для справки.
EDIT:
Использовать библиотеку из https://github.com/eligrey/FileSaver.js было легко, может быть, вы могли бы посмотреть на это, чтобы увидеть, что они делают.

popup.html

<html>
<head>
<script xmlns="http://www.w3.org/1999/xhtml" type="application/ecmascript" async="" src="https://raw.github.com/eligrey/FileSaver.js/master/FileSaver.min.js"></script>
<script>
function onLoad(){
var downloadLink = document.querySelector("#MHTML");

var oFReader = new FileReader();
oFReader.onload = function (oFREvent) {
// None of the following worked
  //window.open('data:application/octet-stream;'+oFREvent.target.result.slice(5));
  //window.open('data:application/message/rfc822;'+oFREvent.target.result.slice(5));
  //window.open(oFREvent.target.result);
};

chrome.tabs.getSelected(null, function(tab) {

chrome.pageCapture.saveAsMHTML({tabId: tab.id}, function (mhtml){

/// Works but requires user input
//downloadLink.setAttribute('download',tab.title+'.mhtml');
//downloadLink.setAttribute('href',window.webkitURL.createObjectURL(mhtml));

///Works but awful filename without extension
//window.open(window.webkitURL.createObjectURL(mhtml));

///Doesnt work
//oFReader.readAsDataURL(mhtml);

///Using https://github.com/eligrey/FileSaver.js , works great
saveAs(mhtml, tab.title+'.mhtml');
})
});

}
</script>
</head>
<body onload="onLoad();" style="width: 400px">

<a id="MHTML" href="#">Download Page As MHTML</a>

</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...