IE8为什么会阻止一些文件下载?

9

这在我的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脚本。仍在寻找解决方法。


仅返回翻译文本:+1 仅仅是对第一行的赞赏... - jeroen
你能发布可疑代码吗? - Quintin Robinson
你是在加载托管在你的域名上的jQuery副本,还是从不同的域名(如CDN)中获取它? - Joe White
我正在从http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js加载jQuery库。 - Jiminy Cricket
2个回答

4
使用JavaScript触发下载是分发恶意软件的常见方式(例如:横幅广告可能会在显示广告的所有网站上触发下载)。
这并不让我感到惊讶,它会引起“红旗”并增加安全预防措施。
我认为您唯一的选择是不使用JavaScript来触发下载。还有其他方法吗?

4
我无法重新启用“为了保护您的安全”功能,但根据这篇文章window.location可能是罪魁祸首。
您尝试过吗?
$('<iframe>', {src:downloadLink}).appendTo('body');

替代
window.location = downloadLink;

这是一个英勇的尝试,但我仍然收到错误窗口。 - Jiminy Cricket

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接