边缘浏览器 - iframe.document.open无法正常工作

时间:2016-07-05 08:58:46

标签: javascript angularjs excel iframe microsoft-edge

我们有一些将数据导出到excel文件的功能。 何时出口'单击按钮,调用一些客户端javascript,首先检查客户端浏览器版本,然后根据此,决定呈现excel文档的方式。 它在Chrome& Firefox& IE11在本地测试时。 但是,当我使用运行Edge浏览器的Windows 10计算机远程测试时,不会渲染Excel。

我可能会补充一点,我的本地机器是Win7机器,我正在运行VS2012和IE11。远程机器是带有Edge的Win10,因此需要远程测试。 我已尝试在IE11 F12开发工具中进行仿真,但无法在那里复制Edge错误。

未定义或空引用的错误'因为开放而被抛出使用以下代码时:

excelIFrame.document.open("txt/html", "replace");
                    excelIFrame.document.write(sHTML);
                    excelIFrame.document.close();
                    excelIFrame.focus();
                    excelIFrame.document.execCommand("SaveAs", true, "Spreadsheet.xls");

iframe存在于html中,不会动态添加。

<iframe id="excelIFrame" style="display:none"></iframe>

我已经尝试了以下可能的解决方案来实现这一点,但无济于事 -

可能的解决方案1:将文档分配给temp var时,相同&#39;未定义或空引用错误

var doc = excelIFrame.document;
                        doc.open("txt/html", "replace");
                        doc.write(sHTML);
                        doc.close();
                        doc.focus();
                        doc.execCommand("SaveAs", true, "Spreadsheet.xls");

可能的解决方案2:使用iFrame的contentWindow属性。没有错误,它只是打开&#39; about:blank&#39;不含任何内容。

excelIFrame.contentWindow.contents = sHTML;
                    excelIFrame.src = 'javascript:window["contents"]';

在这个阶段完全不知所措。 该页面是一个angularJS网页。 通过阅读它,我意识到document.open在使用iframe时在边缘是有问题的。但我认为以下链接document.open fails in an iframe可以解决问题。 任何想法或建议都非常感激。

1 个答案:

答案 0 :(得分:0)

这可能对其他正在搜索的人有所帮助。

    //For Edge browser ….. U have to write separate logic for each browser
    if (ua.match(/Edge/)){
       var blob = new Blob([sHTML], {type: 'data:application/vnd.ms-excel'});
       window.navigator.msSaveBlob(blob, "P2P_Report_"+new Date().getTime()+".xls");
    }