From 4877a60aee0836d26d2eb4cd88daf09ce14d10fb Mon Sep 17 00:00:00 2001 From: Ken Fukuyama Date: Wed, 21 Mar 2018 08:37:47 +0900 Subject: [PATCH] Changed the download functionality to cover IE. Since IE doesn't work well with `.click()` (because of access denied) we can take advantage of the `navigator.msSaveOrOpenBlob`. https://stackoverflow.com/questions/46232980/click-giving-access-denied-in-ie11/46233123#46233123 Signed-off-by: Ken Fukuyama --- gateway/assets/script/bootstrap.js | 44 +++++++++--------------------- 1 file changed, 13 insertions(+), 31 deletions(-) diff --git a/gateway/assets/script/bootstrap.js b/gateway/assets/script/bootstrap.js index 9e626319..3b40e3c0 100644 --- a/gateway/assets/script/bootstrap.js +++ b/gateway/assets/script/bootstrap.js @@ -87,40 +87,22 @@ app.controller("home", ['$scope', '$log', '$http', '$location', '$interval', '$f var tryDownload = function(data, filename) { var caught; - - var linkElement = document.createElement('a'); + try { var blob = new Blob([data], { type: "binary/octet-stream" }); - var url = window.URL.createObjectURL(blob); - - linkElement.setAttribute('href', url); - linkElement.setAttribute("download", filename); - - var clickEvent; - - if((navigator.userAgent.indexOf("MSIE") != -1 ) || (!!document.documentMode == true )) { // for IE 11 - clickEvent = document.createEvent("MouseEvent"); - - clickEvent.initMouseEvent("click", /* eventName */ - true, /* bubbles */ - false, /* cancelable */ - window, /* view */ - 0,0,0,0,0, /* detail, screenX, screenY, clientX, clientY */ - false, /* ctrlKey */ - false, /* altKey */ - false, /* shiftKey */ - false, /* metaKey */ - 0, /* button */ - null /* relatedTarget */ - ); - } else { - clickEvent = new MouseEvent("click", { - "view": window, - "bubbles": true, - "cancelable": false - }); + + if (window.navigator.msSaveBlob) { // // IE hack; see http://msdn.microsoft.com/en-us/library/ie/hh779016.aspx + window.navigator.msSaveOrOpenBlob(blob, filename); } - linkElement.dispatchEvent(clickEvent); + else { + var linkElement = window.document.createElement("a"); + linkElement.href = window.URL.createObjectURL(blob); + linkElement.download = filename; + document.body.appendChild(linkElement); + linkElement.click(); + document.body.removeChild(linkElement); + } + } catch (ex) { caught = ex; }