2016-09-09 2 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

다른 스택 오버플로 게시를 통해 내 질문에 대한 답변을 찾았습니다. 나는 서비스 호출 및 성공 콜백에서 다음 newWindow.location = fileUrl하기 전에

window.open popup getting blocked during click event

는 기본적으로, 나는 var newWindow = window.open();를 호출합니다.

+0

아주 좋은 해결책으로, 새 탭을 닫기 위해 타임 아웃을 사용하여 개선했습니다 : setTimeout (function() {newWindow.close();}, 500); 다운로드 후 (내 경험상 시간 제한이 없다면 다운로드가 시작되기 전에 새 탭이 닫힙니다). – Pierre

관련 문제