首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将javascript blob变量下载为mhtml

将javascript blob变量下载为mhtml
EN

Stack Overflow用户
提问于 2012-02-12 06:39:03
回答 2查看 4.1K关注 0票数 1

我正在编写一个google chrome扩展,它使用

代码语言:javascript
复制
chrome.pageCapture.saveAsMHTML(object details, function callback)
function callback (blob mhtmlData) {...};

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

它基本上将mhtml页面的blob表示存储到一个变量中。

现在我想让用户以mhtml文件的形式下载这个blob变量。

我试过了,但是给出了一个200kb的文件,里面充满了随机字符。

代码语言:javascript
复制
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);
    }


}); 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-12 19:25:58

下面是我在页面操作弹出窗口中放入的一些代码。我把我不用的东西留了下来,但把它注释掉以供参考。

编辑:

使用https://github.com/eligrey/FileSaver.js的库很简单,也许你可以看看他们在做什么。

popup.html

代码语言:javascript
复制
<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>
票数 4
EN

Stack Overflow用户

发布于 2020-09-24 14:48:19

如果你想给文件命名,你可以使用一个锚元素,并以编程的方式设置下载属性的名称:

代码语言:javascript
复制
var reader = new FileReader();
reader.readAsDataURL(mhtml);

reader.onloadend = function(e) {
  const dataUrl = e.target.result;
  const a = document.createElement('a');
  a.href = dataUrl;
  a.download = fileName;
  a.click();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9244649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档