我有一个应用程序,使用类似以下代码来在新标签页中打开动态生成的报告。(为了演示,我模拟了参数。)
编辑:看起来我比我意识到的还要落后。它似乎也发生在IE9中,我从未尝试过没有安装PDF插件或使用其他文件类型。
有趣的是,如果我从表单中删除输入字段,上面的代码就像我期望的那样工作。我不确定为什么浏览器会以任何不同的方式处理它。当然,在我的情况下,我需要输入将数据发布到我的脚本。
编辑2:愚蠢的错误。输入是自闭合的。已修复。
编辑3:以下是一些截图,以更好地解释问题。我正在使用this JSBin进行测试。我有一个onclick事件来触发上面的JavaScript函数。
该过程始于第一个选项卡。
编辑3:向前迈出一步,向后退一步。如果我使用window.open()创建一个新窗口,然后以编程方式将form.target设置为该窗口的名称,我至少可以在打开的选项卡中获得“打开/保存”消息...尽管我更喜欢它像其他浏览器一样立即关闭选项卡。更糟糕的是,使用那种技术,新选项卡不再立即关闭。也许还有其他技术?
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);
}
pdf
参数只是生成PDF的脚本的URL。对form
进行操作是为了将参数作为POST
而不是GET
参数发送到脚本。
在IE 8及以下版本、Chrome、Firefox等浏览器中,这将执行以下两个操作之一:
- 如果浏览器可以读取PDF(通过内置功能或插件),它将打开一个新标签并显示报告,这是期望的行为。
- 如果浏览器无法阅读PDF,则会打开新标签页,立即关闭该标签页并下载文件。
似乎在IE 9及以上版本中,第二种情况已经改变。它将打开一个新标签页,但只会显示空白屏幕,直到用户返回原始标签页,点击“打开”或“保存”,然后PDF才会按预期下载。这是一个非常令人困惑的界面。
我想解决这个问题的一种方法是生成临时PDF文件,然后简单地使用window.open()打开它。还有其他调整此功能行为的方法吗?或者有没有推荐的实践方法我还没有遇到过?
(注意:这与PDF无关;任何浏览器可能下载而不是本地显示的文件似乎都存在问题。)编辑:看起来我比我意识到的还要落后。它似乎也发生在IE9中,我从未尝试过没有安装PDF插件或使用其他文件类型。
有趣的是,如果我从表单中删除输入字段,上面的代码就像我期望的那样工作。我不确定为什么浏览器会以任何不同的方式处理它。当然,在我的情况下,我需要输入将数据发布到我的脚本。
编辑2:愚蠢的错误。输入是自闭合的。已修复。
编辑3:以下是一些截图,以更好地解释问题。我正在使用this JSBin进行测试。我有一个onclick事件来触发上面的JavaScript函数。
该过程始于第一个选项卡。
然后,一旦您点击了文本,会打开一个新的标签页。但是它是空白的!
编辑3:向前迈出一步,向后退一步。如果我使用window.open()创建一个新窗口,然后以编程方式将form.target设置为该窗口的名称,我至少可以在打开的选项卡中获得“打开/保存”消息...尽管我更喜欢它像其他浏览器一样立即关闭选项卡。更糟糕的是,使用那种技术,新选项卡不再立即关闭。也许还有其他技术?
<input>
标签没有</input>
的结束标签 - 它是一个自包含的标签。可能由于HTML格式不正确而无法工作。 - sbeliv01<input type='hidden' id='test' name='test' value='test'>
- sbeliv01