2016-09-09 6 views
1

サーバーからファイルをダウンロードするために、以下のサービスコールがあります。私は現在、PDFを新しいタブ/ウィンドウで開き、その他のドキュメントタイプをダウンロードするようにしています。ポップアップブロッカーのない新しいタブ/ウィンドウにPDFをダウンロードするには?

私が今直面している問題は、PDFがポップアップブロッカーによって防止されていることです。これを回避する方法はありますか?

return formService.getForm(params) 
     .$promise 
     .then(response => { 
      var blob = new Blob([response.data], { 
       type: response.responseType 
      }); 
      var fileUrl = (window.URL || window.webkitURL).createObjectURL(blob); 
      if (response.responseType === 'application/pdf') { 
       window.open(fileUrl); 
      } else { 
       var a = document.createElement("a"); 
       document.body.appendChild(a); 
       a.style = "display: none" 
       a.href = fileUrl; 
       a.download = formName; 
       a.target = "_blank"; 
       a.click(); 
       window.URL.revokeObjectURL(fileUrl); 
      } 
     }) 
     .catch(error => { 
      console.error(`Error downloading form '${formName}' `, error); 
     }); 
+1

強制的にクリックイベントが発生するため、ポップアップブロッカーは、これがユーザーが実行したアクションではないことを示唆します。ユーザーに、ウィンドウを開き、再度テストするクリックアクションを実行させます。 – Mike

答えて

5

私は別のスタックオーバーフローポストで私の質問に答えました。

window.open popup getting blocked during click event

私は成功コールバックで、サービスコールとnewWindow.location = fileUrlを作る前に、基本的に、私はvar newWindow = window.open();を呼び出します。

+0

非常に良い解決策、私は新しいタブを閉じるためにタイムアウトでそれを改善しました:setTimeout(function(){newWindow.close();}、500);ダウンロード後(私の経験上、タイムアウトがない場合、ダウンロードが開始される前に新しいタブが閉じられる)。 – Pierre

関連する問題