在IE 9和10中更改了具有target ="_ blank"行为的表单

Dav*_*lle 9 javascript forms tabs internet-explorer-9 internet-explorer-10

我有一个应用程序使用类似下面的代码在新选项卡中打开动态生成的报表.(为了演示,我嘲笑了这些参数.)

function gblPDFWdw(pdf) {
    var formDiv = document.createElement("div");
    formDiv.innerHTML = "<form method=post action='" + pdf + "' target='_blank'><input type=hidden id=test name=test value='test'></form>";
    var form = formDiv.firstChild;
    document.body.appendChild(form);
    form.submit();
    form.parentNode.removeChild(form);
}
Run Code Online (Sandbox Code Playgroud)

pdf参数我们只是URL到生成PDF的脚本.操作的原因form是将参数POST编辑到脚本而不是GET参数.

在IE 8及更低版本,Chrome,Firefox等中,这将做以下两件事之一:

  1. 如果浏览器可以读取PDF(通过内置功能或插件),它将打开一个包含报告的新选项卡,这是所需的行为.
  2. 如果浏览器无法读取PDF,它将打开新选项卡,立即关闭它,然后下载该文件.

似乎#2在IE 9及更高版本中发生了变化.它将打开一个新选项卡,但它只产生一个空白屏幕,直到用户返回原始选项卡,单击"打开"或"保存",然后按预期下载PDF.这是一个非常令人困惑的界面.

我想解决这个问题的一种方法是生成一个临时的PDF文件,然后只需要window.open().是否有其他方法可以调整此功能的行为?或者是否有推荐的做法,我没有遇到过?

(注意:这完全不是PDF特定的;浏览器可以下载而不是本地显示的任何文件似乎都有问题.)

编辑:看起来我的曲线比我意识到的更远.似乎这也发生在IE9中,我从未注意到,因为我没有安装PDF插件或其他文件类型我从未尝试过.

有趣的是,上面的代码工作一样,如果我我希望删除input从表单字段.我不确定为什么浏览器会以不同的方式对待它.当然,在我的情况下,我需要输入POST数据到我的脚本.

编辑2:愚蠢的错误.input是自我关闭.固定.

编辑3:这里有一些截图可以更好地解释这个问题.我正在使用这个JSBin进行测试.我有一个onclick事件来触发上面的Javascript函数.

该过程从第一个选项卡开始.

单击之前的第一个选项卡.

然后,单击文本后,将打开一个新选项卡.但它是空白的!

第二个标签,通过点击打开.

事实证明,原始(现在隐藏)选项卡有一条消息,询问是打开还是保存文件.

警报在第一个标签上!

单击"打开"或"保存"将打开文件就好了.但是这个过程非常令人困惑,并且与其他浏览器不一致.

编辑3:前进一步,后退一步.如果我window.open()用来创建一个新窗口,然后以编程方式设置form.target到该窗口的名称,我至少可以在打开的选项卡中获取打开/保存消息...虽然我更喜欢它立即关闭选项卡浏览器.更糟糕的是,使用该技术,新标签不再立即关闭.也许还有另一种技术?

Biz*_*ime 1

一种偏离解决方案是检测 IE 和 PDF 插件的可用性,然后在 (>IE9 && !plugin) 情况下将“target”属性设置为“_self”。我发现PluginDetect声称 Adob​​eReader 插件检测。

总而言之,这是相当丑陋且不可靠的方法,但在某些情况下应该会产生结果。