gpt4 book ai didi

javascript - 带有目标 ="_blank"行为的表单在 IE 9 和 10 中发生了变化

转载 作者:数据小太阳 更新时间:2023-10-29 03:57:25 24 4
gpt4 key购买 nike

我有一个应用程序使用类似于以下代码的东西在新选项卡中打开动态生成的报告。 (为了演示,我模拟了参数。)

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 等中,这将执行以下两项操作之一:

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

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

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

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

编辑:看起来我比我意识到的更落后。这似乎也发生在 IE9 中,我从来没有注意到,因为我从未在没有安装 PDF 插件或使用其他文件类型的情况下尝试过。

有趣的是,如果我从表单中删除 input 字段,上述代码的工作方式与我预期的一样。我不确定为什么浏览器会以不同的方式对待它。当然,就我而言,我需要将 POST 数据输入到我的脚本中。

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

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

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

First tab, before a click.

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

Second tab, opened via click.

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

The alert is on the first tab!

单击“打开”或“保存”即可正常打开文件。但是这个过程非常困惑,并且与其他浏览器不一致。

编辑 3:前进一步,后退一步。如果我使用 window.open() 创建一个新窗口,然后以编程方式将 form.target 设置为该窗口的名称,我至少可以获得 Open/Save message in the opened tab…虽然我更喜欢它像其他浏览器一样立即关闭标签。更糟糕的是,使用该技术后,新选项卡不再立即关闭。也许还有另一种技术?

最佳答案

一个临时解决方案是检测 IE 和 PDF 插件的可用性,然后在 (>IE9 && !plugin) 情况下将“目标”属性设置为“_self”。我找到了 PluginDetect声称检测到 Adob​​eReader 插件。

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

关于javascript - 带有目标 ="_blank"行为的表单在 IE 9 和 10 中发生了变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14822589/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com