js点击下载html页面

      前几天做了一个功能,下载H5页面。开始的时候,我心想,下载一个内容,用<a>的href标签就能搞定,然而并不是。当我用href做download某html的时候,打开了一个新的页面,并且是我要打开的页面(我用的是火狐浏览器)。后来百度大概知道,有很多种说法:1、有些浏览器不兼容href标签 2、href可以下载非html的内容,比如文本、excel,由于浏览器有自己的安全保护机制,所以不支持href下载。所以,我用下面的的方法,实现了html的下载功能。

以下是js代码:

function fake_click(obj) {

    var ev = document.createEvent("MouseEvents");
    ev.initMouseEvent(
        "click", true, false, window, 0, 0, 0, 0, 0
        , false, false, false, false, 0, null
    );
    obj.dispatchEvent(ev);

}

function export_raw(name, data) {
    var appName = $("#name").val();
    var urlObject = window.URL || window.webkitURL || window;
    var export_blob = new Blob([data]);
    var save_link = document.createElementNS("http://www.w3.org/1999/xhtml", "a");
    if (isFirefox = navigator.userAgent.indexOf("Firefox") > 0 || navigator.userAgent.indexOf("MSIE") > 0) {
        save_link.href = urlObject.createObjectURL(export_blob);
        save_link.download = "运营商报告" + appName + ".html";
    }
    else {
        save_link.download = "运营商报告" + appName + ".html";
    }

    fake_click(save_link);
}
var content = document.getElementsByTagName('html')[0].outerHTML;
var appUserId = $("#appUserId").val();
var url = Feng.ctxPath + '/userInfo/getUserMoreSjmhInfoV2/' + appUserId;
console.log(content);
$("#downloadOperatorReport").click(function () {
    export_raw(url, content);
});

html代码:

 <div style="overflow:auto;" data-reactid="44">
    <a href="#" download="运营商报告${userInfo.real_name}" id="downloadOperatorReport">
        <button type="button" class="ant-btn SQp-w ant-btn-primary ant-btn-lg" data-reactid="45">
           <i class="anticon anticon-download" data-reactid="46"> </i>
          <span data-reactid="47" style="color: #1AB9BB">导出报告</span>
       </button>
    </a>
</div>

但是遇到一种情况,就是当在360浏览器中做下载的时候,会出现下面的情况,两个下载弹出框。(两个弹出框重叠在一起,当点击一个“下载”后,发现下面还有一“新建下载任务”)

仔细观察,你会发现,一个是blob:http://形式的链接,一个是http://形式的链接。

原因分析:肯定是blob又自己新建了一个下载方式。

导致的原因:是下面的这条语句,可能是兼容性问题,360浏览器支持save_link.href下载方式,所以弹出两个下载框,一个是save_link.href,一个是save_link.download

save_link.href = urlObject.createObjectURL(export_blob);
save_link.download = "运营商报告" + appName + ".html";

解决办法:我做了浏览器的判断,下面的这个语句,如果是火狐或者IE的话,走上面的这个语句,否则走下面的语句。虽然有种偷工减料,因为浏览器的内核远远不止这两种,但是在查询怎么判断是360浏览器的时候,在网上查询了很多方法都是不得而果,所以,对于360浏览器我只能用排除法了,对于其它浏览器的判断大家可以上网查看一下,我有时间再补。

 

 if (isFirefox = navigator.userAgent.indexOf("Firefox") > 0 || navigator.userAgent.indexOf("MSIE") > 0) {
        save_link.href = urlObject.createObjectURL(export_blob);
        save_link.download = "运营商报告" + appName + ".html";
    }
    else {
        save_link.download = "运营商报告" + appName + ".html";
    }

 

欢迎加入 CSDN技术交流群:(点击即可加群)QQ群:681223095,方便问题讨论。本博主不一定长期在线,但是qq群里会有很多热心的小伙伴,大家一起讨论解决问题。
关注公众号,更多学习内容给予推送,争取每日更新

这里写图片描述

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值