【问题标题】:Download file in javascript is not working in Chrome在 javascript 中下载文件在 Chrome 中不起作用
【发布时间】:2010-09-21 20:08:57
【问题描述】:

下面是代码

function ExportToExcel() {
            if ($("#dateRange").val() != "") {
                var frm = $("#frmProjectReport").serialize();
                var url = "/Reports/ProjectExcelReport?" + frm;
                Download(url);

            }
        }

        function Download(url) {
            alert(url);
            //var win = window.open(url, "DownloadWin", "resizable=0,status=0,toolbar=0,width=600px,height=300px");
            var win = window.open(url, "DownloadWin", "width=600px,height=300px,scrollbars=yes ,menubar=no,location=no,left=0,top=0")
            win.focus();
            win.moveTo(100, 100);
        }

它适用于除 chrome 之外的所有浏览器。

我也使用了框架,如下代码,但在数据量很大的情况下它不起作用..

 function Download(url) {
            try {
                $("#fileIframe").html("");
                var iframe = $('<iframe name="postframe" id="postframe" class="hidden" frameBorder="0" src="about:none" />');
                $('#fileIframe').append(iframe);
                $('#frmProjectReport').attr("action", url);
                $('#frmProjectReport').attr("method", "post")
                $('#frmProjectReport').attr("target", "postframe")
                $('#frmProjectReport').submit();

                //win = window.open(url, "DownloadWin", "width=600px,height=300px,scrollbars=yes ,menubar=no,location=no,left=0,top=0")
                //win.focus();
                //win.moveTo(100, 100);
            }
            catch (e) {
                alert(e)
            }
        }

【问题讨论】:

  • 你检查过你的弹出窗口拦截器吗?
  • chrome 发生了什么?如果窗口没有打开,那么可能是因为弹出窗口阻止程序。
  • 是的,我做到了...代码在除 chorme 之外的所有浏览器中都可以工作。

标签: javascript jquery


【解决方案1】:

这是我们使用IFRAME 导出 excel 文件的方式:

function download(src){
    var ifr = document.createElement('iframe');
    ifr.style.display = 'none';
    document.body.appendChild(ifr);
    ifr.src = src;
    ifr.onload = function(e){
        document.body.removeChild(ifr);
        ifr = null;
    };
}

它适用于所有浏览器,并且具有不弹出窗口的优点。

【讨论】:

  • 感谢 Mic 的回复。但是当序列化对象中的数据非常大时,这也会导致问题。在这种情况下,什么都不会发生。在我的情况下,数据量非常大。
  • 通过 GET 请求(在 url 中)发送的数据量是有限的,并且取决于浏览器。如果它很大,你需要先用 POST 调用你的后端,接收一个 id,然后用这个 id 进行 GET 调用。
【解决方案2】:

尝试以下方法:

function Download(url){
    try
    {
        var win = window.open(url,"DownloadWin","width=600px,height=300px,scrollbars=yes ,menubar=no,location=no,left=0,top=0");
        try
        {
            win.focus();
            win.moveTo(100, 100);
        }catch(e){/*Focus|moveTo not supported*/}
    }catch(e){/*open not supported, doubt it.*/}
}

我认为这可能取决于 moveTo() 方法,因为 Chrome 是一个纯选项卡式浏览器。

也可以试试window.resizeTo(100,100)

【讨论】:

  • 我也试过这个,罗伯特,但它对我不起作用。感谢您的回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-07
  • 1970-01-01
  • 2021-05-16
  • 2015-12-06
  • 2020-08-18
  • 2014-06-12
相关资源
最近更新 更多