1

我管理一个 ASP.NET 站点,他们希望通过单击按钮打开多个报告(最好每个在其自己的选项卡中)。报告现在保存为 URL,所以我只需要使用这些 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 方法的前 2 行的优点是强制 url 在新选项卡中打开而不是在新窗口中打开。但是,在上面的示例中,当我在打开空白窗口后设置位置时,我收到文件下载错误 IE “阻止此站点下载”: 在此处输入图像描述

当第二个 url 打开时(在新窗口中)没有问题(我收到文件下载提示)。

为什么第二种方法有效(我收到文件下载提示),而第一种方法无效(我收到 IE 安全警告),如果他们打开相同的 url?有没有办法使用javascript(或jQuery)解决这个问题?

客户要求单击一个按钮即可打开所有这些报告。我不能在一个请求中将它们全部压缩,因为报告是由 SSRS 根据对特定 url 的获取请求(我试图在新选项卡中打开的那些)生成的。

请注意,问题不是“我如何打开多个选项卡”,这就是为什么 window.open('') 与 window.open('url') 之间存在行为差异的原因

4

1 回答 1

1

没有 JavaScript 魔术可以欺骗浏览器打开多个标签。如果有......它将被停止,因为它是一个安全漏洞(下载/标签垃圾邮件拒绝服务)。

有一个更好的解决方案,适用于所有浏览器。您甚至可以在 JavaScript 和 ASP.NET 之间进行选择。

创建多个 iframe 元素并使用页面上的选项卡/链接/按钮一次显示一个(简单的 onclick 操作可显示一个 iframe 并隐藏其余部分)。对于下载,如果服务器端脚本失败,此方法的优点是不会丢失当前页面(因此用户保留在当前页面上,而不是 500 内部错误或空白页面)。

对于多个下载,为什么不压缩服务器上的文件以获得单个下载提示?不要用许多下载提示来惹恼用户是有道理的。

于 2013-01-02T23:40:43.963 回答