2017-12-07 1 views
0

양식 제출시 새 탭에서 PDF URL을 열어 양식을 제출 한 후 클라이언트 사이트에서 PDF를 다운로드하고 있습니다. 그러나 Chrome, Safari 및 FF에서는 모두 "팝업"을 차단합니다. 브라우저에서 window.open()을 차단하지 못하도록하는 방법에 대해 이야기하는 몇 가지 기사를 보았습니다. 그들은 보통 아약스와 관련이 있지만 아약스를 사용하지는 않습니다. 다른 기사에서는 window.open()이 click 이벤트 내에서만 작동하는 방법에 대해 설명합니다. 그리고 저것조차 저를 위해 작동하지 않는다.더 이상 window.open()을 사용할 수 없습니다

그것은 감각의 톤을하지 않습니다하지만 내 예제에서 나는 작동하지 않고 차단됩니다, 클릭 나는 JQuery와 외부의 간단한 라인을 넣어하더라도

<script> 
    jQuery(document).ready(function() { 
     jQuery(".gform_confirmation_message a").on("click", function(e){ 
      e.preventDefault(); 
      var newWin = window.open("", "_blank"); 
      newWin.location = jQuery(".gform_confirmation_message a").attr("href"); 
     }); 

     jQuery(".gform_confirmation_message a").trigger("click"); 
    }); 
</script> 

을 유발하려고합니다.

var newWin = window.open("", "_blank"); 

또한 이들 중 하나는 절대적으로 아무 것도 아닙니다. 팝업 차단을 불러 오지 않습니다.

jQuery(".gform_confirmation_message a").trigger("click"); 
OR 
jQuery(".gform_confirmation_message a").click(); 

나는 브라우저가 스팸/광고 보안을 해치는 것을 알고 있지만 이것은 우습다.

+0

URL로 이동하는 페이지에 숨겨진 iframe을 추가하면 효과적 일 수 있습니다. – Taplar

+0

@Carcigenicate window.open()은 여러 연령대의 자바 스크립트 기능입니다. 우리 팀의 다른 프로그래머들 중 누구도이 기능을 제거한 모든 브라우저에 대해 구체적인 것을 듣지 못했습니다. – pinksharpii

+0

관련 : https://stackoverflow.com/questions/3077242/force-download-a-pdf-link-using-javascript-ajax-jquery –

답변

1

팝업이 여전히 가능합니다. 단지 사용자 작업에 의해 트리거되어야합니다. 위조 된 click 이벤트를 만드는 것은 사용자 작업으로 간주되지 않습니다.

Content-Type: application/octet-stream 

또는

Content-Disposition: attachment 

을 HTML5로 : 다운로드를 시작할 수 있습니다

한 가지 방법은 단순히 즉시 다운로드합니다되도록 설정 올바른 콘텐츠 형식과 PDF로 페이지를 리디렉션하는 것입니다 임시 <a> 태그를 작성하여 다운로드를 시작하고 파일 URL에 download 속성을 설정하십시오. 가상 클릭 이벤트는 계속 작동합니다.

내가 브라우저 스팸/광고 보안 아래 망치 알고

var textFile = new Blob(["hello world"], {type: "text/plain"}); 
 
var blobUrl = URL.createObjectURL(textFile); 
 

 
var a = document.createElement("a"); 
 
a.href = blobUrl; 
 
a.download = "myTextFile.txt"; 
 
a.click(); // start the download
하지만 이건 말도 안돼.

팝업이 짜증납니다. 쓸데없는 팝업 창을 만들지 않고도 파일을 다운로드 할 수있는 방법은 많습니다.

+0

적절한'content-disposition' 응답 헤더도 도움이 될 수 있습니다. (다시 : 응답의 content-type 부분) –

+0

"팝업"을하려고하지만 새로운 탭에서 링크를 여는 것을 고려하지 않았습니다. 우리는 PDF를보기 위해 사용자가 사이트를 떠나기를 원하지 않습니다. 이 바닐라 JS 솔루션은 꽤 괜찮습니다. 감사합니다. – pinksharpii

+0

@pinksharpii 콘텐츠 유형이 8 진수 스트림 인 위치로 클라이언트를 리디렉션 할 때 많은 브라우저는 다운로드를 시작하고 동일한 페이지에 남아 있습니다. IE5와 같은 구형 브라우저에서는 HTML5 솔루션이 작동하지 않는 반면, 역 호환성은 가장 낮습니다. –

관련 문제