window.close()在IE(11)/ Chrome中无法正常工作?

时间:2014-06-26 10:01:40

标签: php ajax internet-explorer google-chrome download

我正在对生成查询的网站进行AJAX调用,然后将其保存到.txt文件中。
在AJAX完成后应该下载该文件并关闭该下载窗口 Howether IE自动关闭它,然后尝试关闭主窗口,不应该关闭。
同时Chrome只关闭下载窗口,这也是IE应该做的事情。
有解决方法吗?

function start(){
   $.ajax({
        url: ('query.php'),
        type: 'POST',
        async:false,
        data: { 
        id: id,
        intnr: intnr
        },
        dataType: "html"
         })
          .done (function(response) { window.open('download.php');  window.close('download.php'); })
          .fail (function(xhr, textStatus, errorThrown) { alert(xhr.responseText); })
        ;
}

download.php只是:

<?php
header ( 'Content-Type: text/html');
header ( "Content-Disposition: 'attachment'; filename='File.txt'");
include ('/xx/xx/query.txt');
?>

编辑:解决方法,但现在正在运作..
缩短功能

.done (function(response) { var download_window = window.open('download.php'); })

添加到download.php

<script>
var s = navigator.userAgent; 
if(s.indexOf("Chrome") > -1 == true) 
{ 
window.open('', '_self', ''); 
window.close();
}
</script>

3 个答案:

答案 0 :(得分:2)

那么:

.done (function(response) {
    var download_window = window.open('download.php');
    download_window.close();
 })

..应该让IE不要关闭任何其他内容。

答案 1 :(得分:1)

这并没有真正回答你的问题,但提供了另一种选择。

在jQuery代码中尝试这样的事情:

.done (function(response) { window.location.href = "download.php"; })

..并在download.php中添加标题以强制下载:

header("Content-Description: File Transfer");
header("Content-Type: application/download");
header("Content-Type: application/force-download");
// Removed this from my code.
// header("Content-Type: application/octet-stream");
// Added this for yours.. not sure exactly what's optimal for your case.
header("Content-Type: text/html");
header("Content-Transfer-Encoding: binary");
header("Content-Disposition: attachment; filename=File.txt");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Expires: 0");
header("Pragma: public");

ob_clean();
flush();
readfile("/xx/xx/query.txt");

在我的项目中,这个php代码在点击提交按钮(表单)后运行,如果我没记错的话,它只显示了一个下载对话框而没有更新地址栏或显示空白页面。

答案 2 :(得分:0)

如果它是弧形窗口,这将起作用

function GetRadWindow() {
                var oWindow = null;
                if (window.radWindow)
                    oWindow = window.radWindow;
                else if (window.frameElement && window.frameElement.radWindow)
                    oWindow = window.frameElement.radWindow;
                return oWindow;
            }

function selfClose(){
GetRadWindow().close();
}