JQuery下载网页的方法

本文介绍了如何在网页中实现点击按钮下载当前网页为HTML格式。对于Chrome和Firefox,通过模拟鼠标点击事件触发浏览器下载功能;而对于不支持Blob的IE浏览器,采用新建窗口替换内容并调用`SaveAs`命令来实现。示例代码包含完整流程。

前段时间需要写一个下载网页的程序,要求是点击导出按钮即可下载本网页,并保存成.html格式,

使用网上的<a> </a>链接下载方法只适合用于.txt, .rar,.exe等文件的下载,而不能下载图片和网页内容(使用浏览器中的另存为是可以的,但这并不是在网页实现,而是浏览器自身的附带功能),我们需要改写程序来下载网页中的内容并保存成HTML格式,使用的方法如下:

针对不同的浏览器,下载方法有些差异,但是火狐和谷歌中下载方法是可以通用的,但是IE需要另外的方法:

1 谷歌和火狐:

方法:模拟鼠标点击事件,调用浏览器中的下载功能(JavaScript鼠标事件)

代码:function ExportFile(strFileName, strFileData) {
   
var aLink = document.createElement('a');
    var blob = new Blob([strFileData]);
    var evt = document.createEvent("MouseEvents");
    evt.initEvent("click", true, false);//initEvent 不加后两个参数在FF下会报错, 感谢 Barret Lee 的反馈
    aLink.download = strFileName;
 
  aLink.href = URL.createObjectURL(blob);
    aLink.dispatchEvent(evt);
}

虽然使用的还是<a> 链接的方法,但是这里使用了鼠标事件,

var blob = new Blob([strFileData]);

这句代码是使用指定的数据创建二进制大对象,再创建鼠标事件,从而分发事件模拟下载功能;

2 有人说,上面这种方法不是挺好的吗,IE浏览器不支持吗?嗯,对了,IE浏览器就是不支持这样的方法,这是因为在IE10之前的版本中,是不支持 Blob(二进制大对象)类型(IE真是奇葩),所以在IE浏览器中我们需要另寻他路。

经过长时间的尝试,发现了在IE浏览器下的替代方法,但不是很完美,存在一些其他的问题,不过基本功能是可以的,代码如下:

代码:

var winName = window.open('', '_blank','');
winName.document.open('text/html', 'replace');
winName.document.write(strReportText);
winName.document.execCommand('SaveAs');
winName.close();


使用window.open()方法来打开新页面,然后使用要下载的页面内容来替换新页面中的内容,然后在调用新页面中的document.execCommand('SaveAs');方法来实现下载的功能,然而这个时候就有人问了,费那么大的劲干嘛,为什么不直接调用本页面的document.execCommand('SaveAs');来保存呢,那是因为我本页面中有使用JavaScript脚本新添加了数据,直接调用本页面中的document.execCommand('SaveAs');来保存只是原始的静态HTML页面,而动态添加的内容是不能下载的,so,只能打开新的页面,在将内容复制替换,从而间接调用document.execCommand('SaveAs');


注意:如果你仅仅需要下载静态网页内容,直接调用document.execCommand('SaveAs');就可以了,而不需要使用上述方法实现

下面贴出完整代码,如有错误,希望多多提示,谢谢!

代码:

$(".btnreport").click(function(){
var userAgent = navigator.userAgent;
var strContent = document.getElementsByTagName('html')[0].outerHTML;
if(userAgent.indexOf("MSIE") > -1){
var winName = window.open('', '_blank','');
winName.document.open('text/html', 'replace');
winName.document.write(strReportText);
winName.document.execCommand('SaveAs');
winName.close();
}else{
ExportFile("signinform.html", strReportText);
}
});

希望能够帮助到你,赞!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值