这在我的IE8用户中引起了一些困扰。
在我的网站上,我通过php脚本(file_download.php?file=X123)启动文件下载。在此页面中,它记录一些数据到数据库,然后使用标头强制下载。在所有浏览器上,这个页面上的所有内容似乎都正常工作。
问题出现在如何调用此页面,这似乎给我带来了讨厌的小提示“为了保护您的安全 - Internet Explorer已阻止网站下载文件到您的计算机”。
如果我使用普通的href标签<a href="/file_download.php?file=X123">download</a>
,它会正确启动(没有IE阻止下载消息)。
但是当我使用jQuery脚本启动时,它就会给我这个警告。
所以我想IE8可能会对javascript重定向产生怀疑,所以我在本地页面上制作了一个简单的JS函数,但是它没有任何问题。
因此,似乎jQuery可能是罪魁祸首...是因为window.location事件是从另一个页面或脚本源调用的吗?有人知道这是如何工作的吗?
我将继续测试,但目前,有人能解决这个问题吗?要求用户调整他们的IE设置不是一个选项。
谢谢
-------- jQuery代码 --------------
jQuery("a").click(function(e){
if(jQuery(this).attr("href") !== undefined){
downloadLink = jQuery(this).attr("href");
thingClicked = jQuery(this);
dll_io = downloadLink.indexOf("/file_download.php?file_id=");
dll_io2 = downloadLink.indexOf("/file_download_safe.php?file_id=");
if(dll_io == 0 || dll_io2 == 0){
e.preventDefault();
jQuery.getScript("/includes/get_login.php?file_id=" + downloadLink + "&dll_io=" + dll_io + "&dll_io2=" + dll_io2 + "&last_url=" + document.URL, function(rp){
//get_login.php sets 'requested_dl_id' cookie
if(dll_io2 == 0){
window.location = downloadLink;
}else{
if(rp == "allow"){
window.location = downloadLink;
}else{
jQuery("#download_prompt").click();
}
}//end condition: if file_download_safe -> set cookie and send to page. IF file_download -> set cookie and decide to prompt or not.
});
}//end if fd == file_download.php
}//end only execute code if 'a' has a defined 'href' attribute
});
----更新----
我现在已经自学了足够多的知识,以理解这个问题的原因 - 但没有简单的解决方案。原因是IE7和8会自动阻止从非用户事件启动的下载。所以onclick事件会启动下载,但不会启动jQuery脚本。仍在寻找解决方法。