1

我对 Internet Explorer 7 和 8 有一个大问题。

情况:

我有一个建立医疗处方的表格。当我点击保存按钮时,脚本将 DomainObject 保存在 DB 上,并将名为“已保存”的布尔属性(添加表单的面板)设置为 true,并将名为 PDF 的字节 [] 属性设置为带有字节流的 PDF。

在 Panel 的 RenderHead 上,我读取了这个布尔值,如果为真,我使用以下代码强制触发隐藏按钮:

String js = "$('#" + printPDF.getMarkupId() + "').click();";    
response.renderOnDomReadyJavaScript(js);

该按钮执行以下代码:

    ResourceStreamRequestHandler handler = new ResourceStreamRequestHandler(new ByteArrayResourceStream(pdf, "application/pdf"));
    handler.setFileName("foo.pdf");             
    RequestCycle.get().scheduleRequestHandlerAfterCurrent(handler);

此代码在 FF 和 Chrome 上完美运行。出现浏览器下载窗口,用户可以将 PDF 保存为高清格式。

不幸的是,Internet Explorer 具有当站点需要下载某些内容时触发的该死的安全行为。该警告需要用户验证。出现一个黄色条,用户被迫点击“下载”。

截图 http://imageshack.us/a/img198/1438/securityg.jpg

当我点击下载文件时,表单再次提交,与我第一次点击保存时的状态完全相同。因此,没有先前在 DB 上的 INSERT 已经提交;会话被重置为以前的状态等......

结果是域对象的数据库上的双重插入。

有什么线索可以解决这个问题吗?

4

1 回答 1

0

问题是您以编程方式单击下载链接,而不是将浏览器重定向到 URL 或通过 JS window.open(url) 打开 URL。单击链接看起来像是有时受浏览器限制的不需要的操作。

于 2013-06-15T19:39:15.733 回答