Explorar o código

文件下载兼容IE

zhangxc %!s(int64=5) %!d(string=hai) anos
pai
achega
00011aa1a6
Modificáronse 1 ficheiros con 92 adicións e 33 borrados
  1. 92 33
      src/js/information.js

+ 92 - 33
src/js/information.js

@@ -139,7 +139,8 @@ function downLoadFile() {
     const url = isLocal ?'http://192.168.2.236:82'+downUrl + '?download=1' : window.location.hostname+':82'+downUrl + '?download=1'
     console.log('urlurl',url)
     const downTitle = $(this).attr('data-title')
-    download(url, downTitle)
+    // download(url, downTitle)
+    downLoadFileIe(url, downTitle)
   })
 
   // var $form = $('<form method="GET"></form>');
@@ -157,42 +158,42 @@ function downLoadFile() {
 
 
 }
-function getBlob(url,cb) {
-  var xhr = new XMLHttpRequest();
-  xhr.open('GET', url, true);
-  xhr.responseType = 'blob';
-  xhr.onload = function() {
-          if (xhr.status === 200) {
-              cb(xhr.response);
-          }
-  };
-  xhr.send();
-}
-function saveAs(blob, filename) {
-  if (window.navigator.msSaveOrOpenBlob) {
-      navigator.msSaveBlob(blob, filename);
-  } else {
-      var link = document.createElement('a');
-      var body = document.querySelector('body');
+// function getBlob(url,cb) {
+//   var xhr = new XMLHttpRequest();
+//   xhr.open('GET', url, true);
+//   xhr.responseType = 'blob';
+//   xhr.onload = function() {
+//           if (xhr.status === 200) {
+//               cb(xhr.response);
+//           }
+//   };
+//   xhr.send();
+// }
+// function saveAs(blob, filename) {
+//   if (window.navigator.msSaveOrOpenBlob) {
+//       navigator.msSaveBlob(blob, filename);
+//   } else {
+//       var link = document.createElement('a');
+//       var body = document.querySelector('body');
 
-      link.href = window.URL.createObjectURL(blob);
-      link.download = filename;
+//       link.href = window.URL.createObjectURL(blob);
+//       link.download = filename;
 
-      // fix Firefox
-      link.style.display = 'none';
-      body.appendChild(link);
+//       // fix Firefox
+//       link.style.display = 'none';
+//       body.appendChild(link);
       
-      link.click();
-      body.removeChild(link);
+//       link.click();
+//       body.removeChild(link);
 
-      window.URL.revokeObjectURL(link.href);
-  };
-}
-function download(url, filename){
-  getBlob(url, function(blob) {
-      saveAs(blob, filename);
-  });
-}
+//       window.URL.revokeObjectURL(link.href);
+//   };
+// }
+// function download(url, filename){
+//   getBlob(url, function(blob) {
+//       saveAs(blob, filename);
+//   });
+// }
 
 function adjustHeight() {
   var ht = window.innerHeight;
@@ -202,3 +203,61 @@ $(window).on('resize', function(){
   adjustHeight()
 })
 
+
+function downLoadFileIe (url, name) {
+  if (!!window.ActiveXObject || "ActiveXObject" in window) {
+    //ie
+    var oPow = window.open(url, "", "width = 1, height = 1, top = 5000, left = 5000 ");
+    var isOpen = true; //判断window.open是否被禁用
+    try {
+      if (oPow == null) {
+        isOpen = false
+      }
+    } catch (err) {
+      isOpen = false
+    }
+    if (isOpen) {
+      //没禁用window.open采用window.open下载
+      while (oPow.document.readyState !== "complete") {
+        if (oPow.document.readyState === "complete") break;
+      }
+      oPow.document.execCommand("SaveAs", true, name);
+      oPow.close();
+    } else {
+      //禁用了window.open采用iframe下载
+      var oIrame = document.createElement('iframe');
+      oIrame.style.width = "0px";
+      oIrame.style.height = "0px";
+      oIrame.style.opacity = 1;
+      document.body.appendChild(oIrame)
+      oIrame.src = url;
+      var IfDoc = oIrame.contentDocument || oIrame.document;
+      oIrame.onreadystatechange = function () { // IE下的节点都有onreadystatechange这个事件  
+        if (oIrame.readyState == "complete") {
+          // oIrame.execCommand("SaveAs", true, name)
+          document.body.removeChild(oIrame)
+        }
+      };
+
+    }
+
+  } else {
+    if (typeof url == 'object' && url instanceof Blob) {
+      url = URL.createObjectURL(url); // 创建blob地址
+    }
+    var aLink = document.createElement('a');
+    aLink.href = url;
+    aLink.download = name || ''; // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效
+    var event;
+    if (window.MouseEvent) {
+      event = new MouseEvent('click');
+    } else {
+      if (document.createEvent) {
+        event = document.createEvent('MouseEvents');
+        event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
+      }
+    }
+    aLink.dispatchEvent(event);
+  }
+
+}