Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Internet Explorer 11中单击链接的权限被拒绝_Javascript_Jquery_Angularjs_Internet Explorer_Internet Explorer 11 - Fatal编程技术网

Javascript 在Internet Explorer 11中单击链接的权限被拒绝

Javascript 在Internet Explorer 11中单击链接的权限被拒绝,javascript,jquery,angularjs,internet-explorer,internet-explorer-11,Javascript,Jquery,Angularjs,Internet Explorer,Internet Explorer 11,我修改了一个现有的AngularJS应用程序,它通过添加一个按钮列出了客户,允许将客户信息作为vcard下载。我在单击时直接用Javascript创建vcard。“下载”按钮在单击时调用以下函数,并将客户项目作为参数: function transcodeToAnsi(content){ var encoding = "windows-1252"; var nonstandard = {NONSTANDARD_allowLegacyEncoding: true}; return ne

我修改了一个现有的AngularJS应用程序,它通过添加一个按钮列出了客户,允许将客户信息作为vcard下载。我在单击时直接用Javascript创建vcard。“下载”按钮在单击时调用以下函数,并将客户项目作为参数:

function transcodeToAnsi(content){
  var encoding = "windows-1252";
  var nonstandard = {NONSTANDARD_allowLegacyEncoding: true};
  return new TextEncoder(encoding, nonstandard).encode(content);
}

$scope.download = function(item) {
  var filename = 'contact.vcf';
  var aId = "vcard";

  var content = createVCard(item);
  var encoded = transcodeToAnsi(content);

  var blob = new Blob([ encoded ], { type : 'vcf' });
  var url = (window.URL || window.webkitURL).createObjectURL(blob);

  $("body").append('<a id="' + aId + '" href="' + url + '" download=' + filename + ' class="hidden"></a>');
  $timeout(function(){
    document.getElementById(aId).click();
    $("#" + aId).remove();
  })

  return false;
}
第169行是上述功能的说明:

document.getElementById(aId).click();
在控制台中手动输入此语句时,将显示相同的错误

我会很感激每一个关于原因的提示,甚至是一个很好的解决办法

编辑


更正了错误行和键入。

您不能在Microsoft IE中直接打开Blob。必须使用
window.navigator.msSaveOrOpenBlob
。如果您需要的话,还有
msSaveBlob

$scope.download = function() {
    //etc... logic...
    var blob = new Blob([encoded], {type: 'vcf'});

    //for microsoft IE
    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
        window.navigator.msSaveOrOpenBlob(blob, fileName);
    } else { //other browsers
        var a = document.createElement('a');
        a.style = "display:none";
        a.href = URL.createObjectURL(blob);
        a.download = "filename.jpg";
        a.click();
    }
}
最后一件事:前面的代码在firefox上不起作用,因为firefox不支持
click()
。您可以使用以下代码段
prototype
其行为:

HTMLElement.prototype.click = function() {
   var evt = this.ownerDocument.createEvent('MouseEvents');
   evt.initMouseEvent('click', true, true, this.ownerDocument.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
   this.dispatchEvent(evt);
}

这可能是一个问题,因为您将
aId
链接附加到DOM—可能是因为它不确定如何再次删除它。我建议您考虑一下删除DOM附加元素,也许这会有所帮助。@Furze抱歉,我的错误。我打印错了行。。。我更改了它。请尝试更改
document.getElementById(aId)。单击()
$(“#”+aId)。触发(“单击”)@Furze很遗憾,我也犯了同样的错误……非常感谢。就是这样!非常感谢。几个小时以来,我一直在试图解决类似的问题。只是想让你知道,firefox从第5版开始就支持了。点击HtmleElement上的方法。
HTMLElement.prototype.click = function() {
   var evt = this.ownerDocument.createEvent('MouseEvents');
   evt.initMouseEvent('click', true, true, this.ownerDocument.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
   this.dispatchEvent(evt);
}