Javascript 目标为“”的表单_“空白”;IE 9和IE 10中的行为改变

Javascript 目标为“”的表单_“空白”;IE 9和IE 10中的行为改变,javascript,forms,tabs,internet-explorer-9,internet-explorer-10,Javascript,Forms,Tabs,Internet Explorer 9,Internet Explorer 10,我有一个应用程序,它使用如下代码在新选项卡中打开动态生成的报告。(为了演示,我模拟了参数。) 函数gblPDFWdw(pdf){ var formDiv=document.createElement(“div”); formDiv.innerHTML=“”; var form=formDiv.firstChild; 文件.正文.附件(表格); 表单提交(); form.parentNode.removeChild(form); } pdf参数只提供生成pdf的脚本的URL。表单操作的原因是获取

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

函数gblPDFWdw(pdf){
var formDiv=document.createElement(“div”);
formDiv.innerHTML=“”;
var form=formDiv.firstChild;
文件.正文.附件(表格);
表单提交();
form.parentNode.removeChild(form);
}
pdf
参数只提供生成pdf的脚本的URL。
表单
操作的原因是获取脚本中的参数
POST
ed,而不是作为
get
参数

在IE 8及以下版本、Chrome、Firefox等中,这将执行以下两项操作之一:

  • 如果浏览器可以读取PDF(通过内置功能或插件),它将打开包含报告的新选项卡,这是所需的行为
  • 如果浏览器无法读取PDF,它将打开新选项卡,立即关闭它,然后下载文件
  • 在IE 9及以上版本中#2似乎发生了变化。它将打开一个新选项卡,但只会产生一个空白屏幕,直到用户返回原始选项卡,单击“打开”或“保存”,然后按预期下载PDF。这是一个非常混乱的界面

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

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

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

    有趣的是,如果我从表单中删除
    输入
    字段,上面的代码就像我所期望的那样工作。我不知道为什么浏览器会有不同的处理方式。当然,在我的例子中,我需要输入
    POST
    数据到脚本中

    编辑2:愚蠢的错误<代码>输入自动关闭。固定的

    编辑3:以下是一些屏幕截图,可以更好地解释这个问题。我正在用它做测试。我有一个onclick事件来触发上面的Javascript函数

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

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

    结果是,原始(现在隐藏)选项卡上有一条消息,询问是打开还是保存文件

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


    编辑3:前进一步,后退一步。如果我使用
    window.open()
    创建一个新窗口,然后以编程方式将
    form.target
    设置为该窗口的名称,我至少可以在打开的选项卡中获得打开/保存消息……尽管我更希望它像其他浏览器一样立即关闭选项卡。更糟糕的是,使用这种技术,新选项卡不再立即关闭。也许还有另一种技术?

    一个一次性解决方案是检测IE和PDF插件的可用性,然后在(>IE9&&!plugin)情况下将“target”属性设置为“self”。我发现了AdobReader插件检测的声明


    总而言之,它是一种相当丑陋和不可靠的方法,但在某些情况下应该会给出结果。

    对于
    ,没有一个
    结束标记-它是一个独立的标记。可能由于HTML格式错误而无法工作。@sbeliv01很好的观点…愚蠢的错误。但这并没有改变问题。不过,谢谢!也许在输入标记中的属性周围添加引号会有所帮助<代码>@sbeliv01不,刚刚试过。我有理由肯定这不完全是一个HTML验证问题。新选项卡打开得很好…只是打开/保存选项出现在上一个选项卡上,而上一个选项卡现在已隐藏。老实说,如果有更好的方法将数据发布到新选项卡中,我洗耳恭听。新选项卡应该自动关闭,因为它不用于原始页面接管的文件下载。目标URL是否与原始页面位于不同的安全区域?你在多个客户端上重新编程了吗?但真正的问题是,Excel文件也会出现这种情况。(也许只有在没有安装Office或ActiveX的情况下?还没有缩小范围。)谢谢。当然……现在我再考虑一下……我可以强迫Excel文件
    \u self
    。有趣@Davidalanjelle:文档说Acrobat是通过ActiveX查找检测到的,这似乎是IE进行任何插件检测的方法。找到此ActiveXHelper[谢谢!有趣的是,我已经检测到Adobe插件用于其他目的…我将不得不进一步研究Excel的细节。(我希望得到一个不太粗糙的答案;但如果我没有得到答案,我会接受你的答案。)
    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);
    }