Javascript 在Internet Explorer 11中单击链接的权限被拒绝
我修改了一个现有的AngularJS应用程序,它通过添加一个按钮列出了客户,允许将客户信息作为vcard下载。我在单击时直接用Javascript创建vcard。“下载”按钮在单击时调用以下函数,并将客户项目作为参数: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
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);
}