我管理一个ASP.NET网站,他们想要点击一个按钮打开多个报告(最好是每个都在自己的标签中)。报告现在保存为URL,因此我只需要使用这些网址打开多个窗口。
我试图使用javascript(即window.open)这样做。这是我正在做的一个例子(虽然我删除了实际的网址):
<html>
<body>
<button onclick="openLinks();return false;">Open both links</button>
<script type="text/javascript">
function openLinks(){
var FirstWindow = window.open('');
FirstWindow.location = 'https://myssrsReportURL/rs:Format=EXCEL';
window.open('https://myssrsReportURL/rs:Format=EXCEL');
}
</script>
</body>
</html>
上面js方法的前两行具有强制url在新选项卡中打开而不是新窗口的优点。但是,在上面的示例中,当我打开空白窗口后设置位置时,我收到文件下载错误IE“阻止此站点下载”:
第二个网址在没有问题的情况下打开(在新窗口中)(我收到文件下载提示)。
为什么第二种方法有效(我收到文件下载提示)而第一种方法没有(我收到IE安全警告),如果他们打开相同的网址?有没有办法使用javascript(或jQuery)?
客户要求单击按钮即可打开所有这些报告。我无法在一个请求中将它们全部压缩,因为报告是在SSRS根据对特定URL的获取请求(我试图在新选项卡中打开的那些)生成的。
请注意,问题不是“如何打开多个标签”这就是为什么window.open('')与window.open('url')<之间存在行为差异的原因/ p>
答案 0 :(得分:1)
没有JavaScript技巧可以欺骗浏览器打开多个标签。如果有...它将被停止,因为它是一个安全漏洞(下载/标签垃圾邮件拒绝服务)。
有一个更好的解决方案,适用于每个浏览器。您甚至可以在JavaScript和ASP.NET之间进行选择。
创建多个iframe元素,并使用页面上的标签/链接/按钮一次显示一个(简单的onclick动作显示一个iframe并隐藏其余部分)。对于下载,此方法的优点是,如果服务器端脚本失败,则不会丢失当前页面(因此,用户将保留在当前页面上,而不是500内部错误或空白页面。)
对于多次下载,为什么不压缩服务器上的文件以获得单个下载提示?通过许多下载提示不会惹恼用户是有道理的。