2017-12-07 9 views
0

私はフォームを提出した後にPDFをダウンロードするためにクライアントサイトで作業しています。しかし、Chrome、Safari、FFでは、それらはすべて「ポップアップ」をブロックしています。私は、ブラウザがwindow.open()をブロックしないようにする方法についていくつかの記事を見てきました。それらは通常ajaxに関連していますが、私はajaxを使用していません。他の記事では、window.open()がclickイベントの中でのみ動作する方法について説明しています。それでも私にとってはうまくいかない。私はもはやwindow.open()を使用できません

それは感覚のトンがありませんが、私の例では、私はクリックをトリガーしようとすると、

<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> 

私はjqueryの外で簡単なラインを入れた場合でも、動作しないとブロックされます。

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()は、年齢のjavascript機能でした。私のチームの他のプログラマーの誰もが、この機能を削除したすべてのブラウザーに固有のことを聞いたことはありません。 – pinksharpii

+0

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

答えて

1

ポップアップも可能です。それらは、ユーザアクションによってトリガされる必要があります。偽のclickイベントを作成することは、ユーザーアクションとはみなされません。 HTML5では

Content-Type: application/octet-stream 

または

Content-Disposition: attachment 

:あなたは、ダウンロードを開始することができます

一つの方法は、単にそれがすぐにダウンロードするように設定正しいコンテンツタイプを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'レスポンスヘッダーも役立ちます(re:content-typeの回答の一部) –

+0

私は"ポップアップ "をしようとしているのですが、新しいタブでリンクを開きます。私たちは、ユーザーがPDFを見るためにサイトから持ち出されることを望んでいません。このバニラのJSソリューションは、大丈夫ですが、ありがとうございます。 – pinksharpii

+0

@pinksharpiiコンテンツタイプがオクテットストリームである場所にクライアントをリダイレクトすると、多くのブラウザでダウンロードが開始され、同じページに残ります。 HTML5ソリューションはIE6などの古いブラウザでは機能しない可能性がありますが、最も下位互換性があります。 –

関連する問題