2

所以我有一个我认为有些独特的问题,我不确定解决它的最佳方法是什么。我有一些过去在所有浏览器中运行良好的遗留代码,突然在 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
}

下载表格——

<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 页面来获取下载文件,然后将 Finished 表单发布到用户已经打开的页面以重新加载帐户历史详细信息,而不是显示下载图像按钮。我首先意识到这是一种非常糟糕的方式。这是由正在学习的人编写的遗留代码,并且已经被数百个客户用于生产,所以我不能在没有我的老板和我们所有客户的重大项目批准的情况下重写它。

4

2 回答 2

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>
于 2013-04-25T00:12:54.047 回答
0

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

看看这个问题,了解如何检测文件何时被浏览器下载。

另一个想法是放弃第一个表单提交,转而使用带有指向文件下载链接ahref属性的简单链接,使用查询字符串参数传递附加数据。taget="_blank"如果您在没有它的情况下仍然遇到同样的问题,您可能还想添加该链接。

于 2013-04-15T23:13:54.977 回答