【发布时间】:2010-01-14 14:47:01
【问题描述】:
如果相应的请求不是直接从用户操作(如“点击”处理程序或本机表单提交)。可能还有更多细节和细微差别,但这是让我感到沮丧的基本行为。
在我看来,这种情况很常见:一些可下载内容(例如,准备好的 PDF 报告)前面的用户界面允许在创建内容时使用一些选项和输入。现在,就像所有允许用户规定应用程序如何做某事的表单一样,输入可能是错误的。不总是,但有时。
因此存在两难境地。如果客户端试图做一些花哨的事情,比如运行一个 AJAX 事务让服务器检查表单内容,然后重新提交以获取下载,IE 不会喜欢这样。它不会喜欢它,因为带回附件的实际 HTTP 事务不会发生在原始用户操作事件处理程序中,而是发生在 AJAX 完成回调中。更糟糕的是,由于 IE 安全栏似乎认为解决所有问题的方法是简单地从其原始 URL 重新加载外部页面,它对用户继续下载可疑内容的邀请甚至都不起作用。
另一种选择是让表单消失。服务器检查参数,如果有任何错误,它会响应表单容器页面,并适当地添加错误消息。如果表单内容正常,它会生成内容并将其作为附件发送回 HTTP 响应中。在这种情况下(我认为),IE 很高兴,因为内容显然是由用户直接请求的(顺便说一句,这是区分好内容和坏内容的一种可笑的脆弱方式)。这很好,但现在的问题是客户端环境(即我页面上的代码)无法判断下载是否有效,因此表单仍然只是坐在那里。如果我的表单在某种对话框中,那么我真的需要在操作完成后关闭它——真的,这就是以 AJAX 方式进行操作的动机之一。
在我看来,唯一要做的就是为表单对话框配备类似“下载开始时关闭”的消息。这对我来说真的很糟糕,因为它是“请为我按下此按钮”界面的示例:理想情况下,我自己的代码应该能够在适当的时候按下按钮。我不知道的关键是客户端代码是否有任何方法可以检测表单提交导致附件下载。我从来没有听说过一种检测方法,但这对我来说会打破僵局。
【问题讨论】:
标签: javascript jquery internet-explorer