IE10下载问题有两个javascript表单提交

时间:2013-04-15 22:43:08

标签: javascript asp-classic internet-explorer-10

所以我认为我有一个独特的问题,我不确定最好的方法是什么。我有一些遗留代码,过去在所有浏览器中运行良好,突然在IE10中它无效。我会尽力解释它能如何运作以及我认为是什么问题。

我正在开设一个在线银行页面,其中包含用户可以选择将其帐户历史记录下载为QIF,CSV等的页面。该页面使用经典ASP和VB服务器代码编写。该功能的工作方式是用户单击下载按钮,该按钮通过一系列可点击的图像重新加载页面,每个下载文件类型一个。根据他们点击的那个,然后调用一个javascript函数,它在页面上提交一个隐藏的表单,然后提交第二个隐藏的表单,以便再次使用帐户历史记录和过滤器重新加载原始视图。第一个表单操作调用一个asp页面,该页面构建文件并将其作为响应附件返回,通常会提示浏览器下载文件,然后第二个提交操作就是具有历史详细信息的原始asp页面。在IE10中,文件不会下载,而是进行了一些处理,重新加载历史记录的第二次提交也很顺利。

我在我看来发现的是,如果我注释掉提交第二个表单的javascript行,那么下载就可以了,所以我认为正在发生的是提交异步发生并且重定向在下载之前返回。或类似的东西。我不确定。我试图找出一个工作而不必完全重写该功能。有什么想法吗?

编辑:

这一切都发生在的页面是accountDetails.asp

javascript -

function SetOFX(type){
    // There is some code that does conditional handling of the @type parameter
    document.forms.DownloadForm.submit();
    document.forms.Finished.submit();
    return false
}

DownloadForm -

<form name="DownloadForm" id="DownloadForm" action="downloadofx.asp" method="post">
    <!-- a bunch of input type="hidden" elements -->
</form>

完成表格 -

<form name="Finished " id="Finished " action="accountDetails.asp" method="post">
    <!-- a bunch of input type="hidden" elements -->
</form>

因此,DownloadForm调用单独的asp页面来获取下载文件,然后将完成的表单发布到用户已经在的页面上,以重新加载帐户历史记录详细信息,而不是显示下载图像按钮。我意识到这首先是一个非常糟糕的做法;这是由正在学习并且已经被数百个客户用于生产的人们编写的遗留代码,所以我不能在没有得到我的老板和所有客户的重大项目批准的情况下重写它。

2 个答案:

答案 0 :(得分:0)

我没有测试过任何这些想法,但是如果你想保留当前的架构,你可以尝试检测文件何时完全下载然后导航。

查看 this question ,了解如何检测浏览器下载文件的时间。

另一个想法是删除第一个表单提交,转而使用指向文件下载链接的a属性的简单href链接,使用查询字符串参数传递其他数据。如果在没有它的情况下仍然遇到相同的问题,您可能还希望将taget="_blank"放在链接上。

答案 1 :(得分:0)

这是我们最终提出的答案。上面的javascript本来就不应该起作用,实际上我们在测试后发现它在很多地方都没有工作,但我们关心的部分(文件下载)总是有效。事实证明,直到IE10,所有浏览器都足够聪明,知道你不应该以这种方式提交两个表单,最后他们忽略了第二个提交。然而,IE10正在处理它们,并且重定向在文件下载之前返回。由于我们不关心自动重定向,因此我们只提取了该提交,而是在完成的表单中添加了一个提交按钮,以便用户可以手动返回上一个视图。

修正的Javascript -

function SetOFX(type){
    // There is some code that does conditional handling of the @type parameter
    document.forms.DownloadForm.submit();
    return false
}

固定的完成表格

<form name="Finished" id="Finished" action="accountDetails.asp" method="post">
    <!-- a bunch of input type="hidden" elements -->
    <input type="submit" value="Return to Account Details" />
</form>