1

ボタンをクリックするだけで複数のレポートを開きたい ASP.NET サイトを管理しています (できれば、それぞれのタブで)。レポートは今のところ URL として保存されているので、それらの URL で複数のウィンドウを開くだけで済みます。

JavaScript(つまりwindow.open)を使用してそうしようとしています。これが私がやっていることの例です(実際のURLは削除しましたが):

<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 が「このサイトのダウンロードをブロックしました」というエラー メッセージが表示されます。 ここに画像の説明を入力

2 番目の URL が (新しいウィンドウで) 問題なく開きます (ファイルのダウンロード プロンプトが表示されます)。

同じ URL を開こうとすると、2 番目の方法では機能する (ファイルのダウンロード プロンプトが表示される) のに、最初の方法では機能しない (IE セキュリティ警告が表示される) のはなぜですか? JavaScript(またはjQuery)を使用してこれを回避する方法はありますか?

顧客は、ボタンを 1 回クリックしてこれらすべてのレポートを開くことを要求しています。レポートは特定の URL (新しいタブで開こうとしている URL) への取得要求時に SSRS によって生成されるため、1 つの要求ですべてを圧縮することはできません。

問題は「複数のタブを開く方法」ではなく、 window.open('') と window.open('url') の間に動作の不一致が存在する理由です。

4

1 に答える 1

1

ブラウザをだまして複数のタブを開く JavaScript の魔法のトリックはありません。存在する場合は...セキュリティの脆弱性 (ダウンロード/タブ スパム サービス拒否) であるため、停止されます。

すべてのブラウザーで機能する、より優れたソリューションがあります。JavaScript と ASP.NET のどちらかを選択することもできます。

複数の iframe 要素を作成し、ページ上のタブ/リンク/ボタンを使用して一度に 1 つずつ表示します (1 つの iframe を表示し、残りを非表示にする単純な onclick アクション)。ダウンロードの場合、この方法には、サーバー側のスクリプトが失敗した場合に現在のページが失われないという利点があります (したがって、ユーザーは 500 内部エラーまたは空白のページではなく、現在のページに残ります)。

複数のダウンロードの場合、サーバー上のファイルを zip 圧縮して、1 回のダウンロード プロンプトを表示しないのはなぜですか? 多くのダウンロードプロンプトでユーザーを悩ませないことは理にかなっています。

于 2013-01-02T23:40:43.963 に答える