在JavaScript中如何解决用execCommand(


Posted in Javascript onOctober 19, 2015

本解决方案仅适应asp.net mvc 开发环境,其他环境仅供参考。

问题描述:在开发中遇到这样的需求,保存页面,通常使用JavaScript的saveAs进行保存,各浏览器对saveAs支持,见下表。

在JavaScript中如何解决用execCommand(

代码一:初始保存的代码,只有IE6,7,8支持。

function CmdSave() {
  var OW = window.open('', "_blank", "");
  var DD = new Date();
  OW.document.open();
  var content = document.getElementById("content").innerHTML;
  OW.document.write(content);
  var name = mineName + "-" + $("#selDate").val() + ".htm";
  OW.document.execCommand("saveAs", false, name);//执行保存,IE6,IE7,IE8有效
  OW.close();
 }

解决方案:考虑到下载兼容性好,也能起到保存页面的作用,故采用了先生成页面,再下载页面这样的解决方案。

代码二:采用下载方式保存页面代码。

function CmdSave() {
  var css = "<style type='text/css'>.trNormalTd { border-top-width: 0px; border-bottom-width: 0px;text-align:right;}.trLastTd {border-top-width: 0px;text-align:right;}.trFirstTd{border-bottom-width: 0px;text-align: right;}</style>";
  var html = document.getElementById("content").innerHTML;
  var content = css + html;
  var name = mineName + "-" + $("#selDate").val() + ".htm";
  savePage(content, name);
}
 //content 内容 fileName 文件名 先在服务器生成页面,然后再下载生成的页面
 function savePage(content, fileName) {
  $.ajax({
   type: 'post',
   dataType: 'text',
   url: 'FXBB/BCYM',
   data: {
    content: content,
    fileName: fileName
   },
   success: function (result) {
    var url = "YXGZ/DBFX/BBCX/FXBB/XZYM?fileName=" + fileName;
    var downloadUrl = window.location.protocol + "//" + window.location.host + "/" + url;
    window.open(downloadUrl);//下载页面
    //deleteFile(fileName);
   },
   error: function (msg) {
    alert("保存出错");
   }
  });
 }
  //保存页面
  public int BCYM(string content, string fileName)
  {
   string path = System.AppDomain.CurrentDomain.BaseDirectory;
   path = Path.Combine(path, @"Upload\FXBB");
   //清空保存文件文件夹文件
   foreach (string d in Directory.GetFileSystemEntries(path))
   {
    if (File.Exists(d))
    {
     File.Delete(d);
    }
   }
   //生成要保存的页面
   path = System.AppDomain.CurrentDomain.BaseDirectory;
   path = Path.Combine(path, "Upload/FXBB/" + fileName);
   using (StreamWriter sw = new StreamWriter(path, false, Encoding.UTF8))// File.AppendText(path))
   {
    sw.WriteLine(content);
    sw.Flush();
   }
   return 1;
  }
//下载页面
  public void XZYM(string fileName)
  {
   string path = System.AppDomain.CurrentDomain.BaseDirectory;
   path = Path.Combine(path, @"Upload\FXBB\" + fileName);
   string filePath = path;//Server.MapPath("DownLoad/aaa.zip");//路径
   //以字符流的形式下载文件
   FileStream fs = new FileStream(filePath, FileMode.Open);
   byte[] bytes = new byte[(int)fs.Length];
   fs.Read(bytes, 0, bytes.Length);
   fs.Close();
   System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream";
   //通知浏览器下载文件而不是打开
   System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
   System.Web.HttpContext.Current.Response.WriteFile(filePath);
  }

以上内容就是本文关于execcommand兼容性问题的全部叙述,希望大家喜欢。

Javascript 相关文章推荐
js 高效去除数组重复元素示例代码
Dec 19 Javascript
JavaScript中的异常捕捉介绍
Dec 31 Javascript
Bootstrap每天必学之标签与徽章
Nov 27 Javascript
浏览器检测JS代码(兼容目前各大主流浏览器)
Feb 21 Javascript
React-router v4 路由配置方法小结
Aug 08 Javascript
vue实现图片加载完成前的loading组件方法
Feb 05 Javascript
highCharts提示框中显示当前时间的方法
Jan 18 Javascript
Vue 中如何正确引入第三方模块的方法步骤
May 05 Javascript
优化Vue项目编译文件大小的方法步骤
May 27 Javascript
在layui.use 中自定义 function 的正确方法
Sep 16 Javascript
原生js实现的观察者和订阅者模式简单示例
Apr 18 Javascript
浅谈Vue static 静态资源路径 和 style问题
Nov 07 Javascript
简单谈谈Javascript中类型的判断
Oct 19 #Javascript
AngularJS 实现按需异步加载实例代码
Oct 18 #Javascript
学习javascript的闭包,原型,和匿名函数之旅
Oct 18 #Javascript
Javascript中的数据类型之旅
Oct 18 #Javascript
谈谈JavaScript自定义回调函数
Oct 18 #Javascript
JS实现的网页背景闪电闪烁效果代码
Oct 17 #Javascript
JavaScript实现点击按钮切换网页背景色的方法
Oct 17 #Javascript
You might like
在Win7 中为php扩展配置Xcache
2014/10/08 PHP
浅谈PHP链表数据结构(单链表)
2016/06/08 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
javascript IFrame 强制刷新代码
2009/07/23 Javascript
jQuery创建插件的代码分析
2011/04/14 Javascript
ECMAScript 创建自己的js类库
2012/11/22 Javascript
js/html光标定位的实现代码
2013/09/23 Javascript
用js的document.write输出的广告无阻塞加载的方法
2014/06/05 Javascript
小结Node.js中非阻塞IO和事件循环
2014/09/18 Javascript
ie8模式下click无反应点击option无反应的解决方法
2014/10/11 Javascript
node.js中的http.response.removeHeader方法使用说明
2014/12/14 Javascript
node.js中的fs.write方法使用说明
2014/12/15 Javascript
浅谈类似于(function(){}).call()的js语句
2015/03/30 Javascript
浅谈Node.js:理解stream
2016/12/08 Javascript
Vue原理剖析 实现双向绑定MVVM
2017/05/03 Javascript
jquery请求servlet实现ajax异步请求的示例
2017/06/03 jQuery
使用Vuex实现一个笔记应用的方法
2018/03/13 Javascript
灵活使用console让js调试更简单的方法步骤
2019/04/23 Javascript
vue-openlayers实现地图坐标弹框效果
2020/09/24 Javascript
[03:04]2018年度DOTA2玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
Python语言编写电脑时间自动同步小工具
2013/03/08 Python
Python实现PS滤镜碎片特效功能示例
2018/01/24 Python
python调用百度语音识别实现大音频文件语音识别功能
2018/08/30 Python
Python实现Event回调机制的方法
2019/02/13 Python
Python 日期的转换及计算的具体使用详解
2020/01/16 Python
Python如何实现后端自定义认证并实现多条件登陆
2020/06/22 Python
使用 css3 实现圆形进度条的示例
2017/07/05 HTML / CSS
德国baby-markt婴儿用品瑞士网站:baby-markt.ch
2017/06/09 全球购物
vue实现倒计时功能
2021/03/24 Vue.js
总经理秘书的岗位职责
2013/12/27 职场文书
汽车制造与装配专业自荐信范文
2014/01/02 职场文书
2014保险公司个人工作总结
2014/12/09 职场文书
优秀班组事迹材料
2014/12/24 职场文书
PO模式在selenium自动化测试框架的优势
2022/03/20 Python
python 镜像环境搭建总结
2022/09/23 Python
Vue Element plus使用方法梳理
2022/12/24 Vue.js