Firefox下代码触发a标签的click事件无效
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Firefox下代码触发a标签的click事件无效,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2584字,纯文字阅读大概需要4分钟。
内容图文
![Firefox下代码触发a标签的click事件无效](/upload/InfoBanner/zyjiaocheng/1282/29418c1d34f04d98b1680fdbf77f55bf.jpg)
通过一次导出功能是让自己如何一步一步掉坑最后又是怎么爬起来的
在页面中通过document.createElement(‘a‘);
创建一个a标签,然后给a标签的href属性赋url,通过代码触发a标签的click事件请求后台,在Chrome浏览器中请求正常,但是在Firefox中始终无效,debugger发现代码也走到了a.click()
方法,但是就是没反应。代码如下:
$.ajax({
url: Config.ApiUrl + "TZTZ/DowloadFile",
type: "Post",
dataType: "json",
contentType: 'application/json',
data: JSON.stringify(datas),
success: function (data) {
debugger
var strs = new Array(); //定义数组
if (data.Code == 200) {
strs = data.Data.split(";"); //字符分割
console.info(strs);
for (i = 0; i < strs.length; i++) {
if (strs[i] == ";" || strs[i] == "")
break;
var requestUrl = Config.ApiSite + "/Upload/Excel/" + strs[i];
console.info(requestUrl);
var a = document.createElement('a');
// 利用URL.createObjectURL()方法为a元素生成blob URL
a.href = requestUrl;
// 给文件命名
a.download = strs[i];
// 模拟点击(Firefox安全机制禁止了客户端程序员模拟点击)
a.click();
}
} else {
alert("导出异常:" + data.msg);
}
}
});
第一次是直接创建一个a标签去通过a标签的download
属性模拟用户点击,但是发现a标签在火狐浏览器上是失效的,通过百度得出答案是因为火狐浏览器的同源策略不允许用户模拟点击事件也可能是因为Firefox的安全机制不允许开发这么做,后面就做了兼容,关键代码如下:
if (navigator.userAgent.indexOf("Firefox") > -1){
//判断是否Firefox浏览器
//window.open(requestUrl);
window.location.href = requestUrl;
}else {
var a = document.createElement('a');
// 利用URL.createObjectURL()方法为a元素生成blob URL
a.href = requestUrl;
// 给文件命名
a.download = strs[i];
// 模拟点击
a.click();
}
注意:这样通过重定向取做导出excel对于单条数据是没问题的,但是导出多条对的话就会发现
循环window.location.href
下载文件却只执行最后一个,每次都跑到了,但是只下载了循环的最后一个,这是因为页面跳转和下载是异步的,上一条还没来得及跳转呢,你又跳转了
网上看到有人说判断document.all
来决定怎样调用click事件
if(document.all) {
a.click();
} else {
var evt = document.createEvent("MouseEvents");
evt.initEvent("click",true,true);
a.dispatchEvent(evt);
}
但是仍然不行,再次debugger发现,在Firefox下document.all不为空,因此还是执行的a.click()方法,改为不判断document.all,直接创建鼠标事件对象调用。最后完整代码如下:
$.ajax({
url: Config.ApiUrl + "TZTZ/DowloadFile",
type: "Post",
dataType: "json",
contentType: 'application/json',
data: JSON.stringify(datas),
success: function (data) {
debugger
var strs = new Array(); //定义数组
if (data.Code == 200) {
strs = data.Data.split(";"); //字符分割
console.info(strs);
for (i = 0; i < strs.length; i++) {
if (strs[i] == ";" || strs[i] == "")
break;
var requestUrl = Config.ApiSite + "/Upload/Excel/" + strs[i];
console.info(requestUrl);
var a = document.createElement('a');
// 利用URL.createObjectURL()方法为a元素生成blob URL
a.href = requestUrl;
// 给文件命名
a.download = strs[i];
// 模拟点击(Firefox安全机制禁止了客户端程序员模拟点击)
//a.click();
var evt = document.createEvent("MouseEvents");
evt.initEvent("click", true, true);
a.dispatchEvent(evt);
}
} else {
alert("导出异常:" + data.msg);
}
}
});
原文:https://www.cnblogs.com/imtudou/p/11251953.html
内容总结
以上是互联网集市为您收集整理的Firefox下代码触发a标签的click事件无效全部内容,希望文章能够帮你解决Firefox下代码触发a标签的click事件无效所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。