在带有angularjs的Internet Explorer中的Blob网址

Nic*_*ros 12 javascript html5 internet-explorer angularjs bloburls

鉴于此代码(来自其他人):

var module = angular.module('myApp', []);

module.controller('MyCtrl', function ($scope){
    $scope.json = JSON.stringify({a:1, b:2});
});

module.directive('myDownload', function ($compile) {
    return {
        restrict:'E',
        scope:{ data: '=' },
        link:function (scope, elm, attrs) {
            function getUrl(){
                return URL.createObjectURL(new Blob([JSON.stringify(scope.data)], {type: "application/json"}));
            }

            elm.append($compile(
                    '<a class="btn" download="backup.json"' +
                    'href="' + getUrl() + '">' +
                    'Download' +
                    '</a>'
            )(scope));                    

            scope.$watch(scope.data, function(){
                elm.children()[0].href = getUrl();
            });
        }
    };
});
Run Code Online (Sandbox Code Playgroud)

小提琴示例可以在Chrome中下载.但是单击"下载"链接在IE11中没有任何作用.没有错误,没有警告,没有任何响应.

但根据这个它在IE10和11.1的支持.

是否有一些需要更改的IE安全设置或正在进行的操作?

Nic*_*ros 17

为此找到了解决方案.首先,IE处理不同的blob,特别是它使用:

window.navigator.msSaveOrOpenBlob(new Blob([element], {type:"text/plain"}), "filename.txt");`
Run Code Online (Sandbox Code Playgroud)

如果您查看此页面的源代码,您将看到他们是如何做到的.

但是要让它与跨浏览器支持一起使用是一件痛苦的事情......而且最终你会得到FileSaver.js.

..这就是我最终使用的,并且像一个魅力.

  • 我可以遵守这项工作.IE/ROW的条件如下:`// IE 10/11 if(window.navigator.msSaveOrOpenBlob){window.navigator.msSaveOrOpenBlob(blob,fileName); } else {...` (4认同)