web-dev-qa-db-ja.com

Internet Explorerでファイルの自動ダウンロードを開始する方法は?

Internet Explorerでファイルの自動ダウンロードを初期化するにはどうすればよいですか?

たとえば、ダウンロードページで、ダウンロードリンクを表示し、「ダウンロードが自動的に開始されない場合は...」などのメッセージを表示します。ダウンロードは、ページが読み込まれた直後に開始されます。

Firefoxではこれは簡単です。ヘッダーにメタタグを含める必要があります。<meta http-equiv="Refresh" content="n;url">(nは秒数、urlはダウンロードURL)です。これはInternet Explorerでは機能しません。 Internet Explorerブラウザーでこれを機能させるにはどうすればよいですか?

68
Pop Catalin

SourceForge は、ダウンロードするファイルを指す<iframe>属性を持つsrc=""要素を使用します。

<iframe width="1" height="1" frameborder="0" src="[File location]"></iframe>

(副作用:リダイレクトなし、JavaScriptなし、元のURLは変更されません。)

104
devio

Ihateサイトがダウンロードを非常に複雑にする場合と 古き良きリンクの代わりにハックを使用する

デッドシンプルバージョン:

<a href="file.Zip">Start automatic download!</a>

できます!すべてのブラウザで!


通常、インラインで表示されるファイル(画像など)をダウンロードする場合、HTML5には、ファイルのダウンロードを強制するdownload属性があります。また、ファイル名を上書きすることもできます( より良い方法はありますが ):

<a href="report-generator.php" download="result.xls">Download</a>

「ありがとう」ページのあるバージョン:

ダウンロード後に「ありがとう」を表示する場合は、次を使用します。

<a href="file.Zip" 
   onclick="if (event.button==0) 
     setTimeout(function(){document.body.innerHTML='thanks!'},500)">
 Start automatic download!
</a>

そのsetTimeoutの機能はより高度で、たとえばAJAXを使用して全ページをダウンロードします(ただし、ページから離れないでください。window.locationに触れたり、他のリンクを有効にしないでください)。

ポイントは、ダウンロードへのリンクが本物であり、コピー、ドラッグ、ダウンロードアクセラレータによるインターセプト、:visited色の取得、ブラウザーの再起動後にページが開いたままになっている場合の再ダウンロードなどができないことです。

これがImageOptimに使用するものです

50
Kornel

最近、ページに次のスクリプトを配置することで解決しました。

setTimeout(function () { window.location = 'my download url'; }, 5000)

メタリフレッシュの方がいいと思いますが、うまくいかない場合はどうすればいいですか...

23
ullmark

私は同様の問題を抱えていましたが、上記の解決策はどれもうまくいきませんでした。これが私の試みです(jqueryが必要です):

$(function() {
  $('a[data-auto-download]').each(function(){
    var $this = $(this);
    setTimeout(function() {
      window.location = $this.attr('href');
    }, 2000);
  });
});

使用法:data-auto-downloadという属性を、問題のダウンロードを指すリンクに追加するだけです。

<p>The download should start shortly. If it doesn't, click
<a data-auto-download href="/your/file/url">here</a>.</p>

すべての場合に機能するはずです。

21
kikito

簡単なjQueryでこの問題を解決できました。

$(function() {
   $(window).bind('load', function() {
      $("div.downloadProject").delay(1500).append('<iframe width="0" height="0" frameborder="0" src="[YOUR FILE SRC]"></iframe>'); 
   });
});

私のHTMLでは、単純に

<div class="downloadProject"></div>

これは、1秒半待ってから、ダウンロードするファイルを参照するiframeをdivに追加するだけです。 iframeがページ上で更新されると、ブラウザがファイルをダウンロードします。そのような単純な。 :D

7
CameronK

Chrome、firefox、IE8以上で動作します。

var link = document.createElement('a');
document.body.appendChild(link);
link.href = url;
link.click();
6

私はこれを使用しましたが、動作しているようで、フレームワークなしの単純なJSです:

Your file should start downloading in a few seconds. 
If downloading doesn't start automatically
<a id="downloadLink" href="[link to your file]">click here to get your file</a>.

<script> 
    var downloadTimeout = setTimeout(function () {
        window.location = document.getElementById('downloadLink').href;
    }, 2000);
</script>

注:これは、ページがロードされた瞬間にタイムアウトを開始します。

5
Tyler

これは私がいくつかのサイトで使用しているものです(jQueryが必要です)。

$(document).ready(function() {
    var downloadUrl = "your_file_url";
    setTimeout("window.location.assign('" + downloadUrl + "');", 1000);
});

ファイルは1秒後に自動的にダウンロードされます。

5
Rabi

もう一つ:

var a = document.createElement('a');
a.setAttribute('href', dataUri);
a.setAttribute('download', filename);

var aj = $(a);
aj.appendTo('body');
aj[0].click();
aj.remove();
3
ZettaCircl

私はチェックして見つけました、それはアンカータグまたは入力ボタンにonclickイベントを書くことでボタンクリックで動作します

onclick='javascript:setTimeout(window.location=[File location], 1000);'
3
Vandana

ルーツに戻り、私はこれを使用します:

<meta http-equiv="refresh" content="0; url=YOURFILEURL"/>

WC3準拠ではないかもしれませんが、すべてのブラウザーで完璧に動作します。HTML5/ JQUERY/Javascriptはありません。

あいさつトム:)

2
Tom

必ずファイルを提供してくださいwithout no-cache header!ユーザーが最初に保存せずにダウンロードを「開こう」とすると、IEに問題が発生します。

2
scunliffe

これはあなたに役立つと思います。しかし、ビジターは時間をかけずに数秒で何かを得た場合、簡単であるため、再びサイトにアクセスします。 <a href="file.Zip" onclick="if (event.button==0) setTimeout(function(){document.body.innerHTML='thanks!'},500)"> Start automatic download! </a>

1
raheel

これは私にとってはうまくいくようでした-すべてのブラウザで。

 <script type="text/javascript">
    window.onload = function(){
     document.location = 'somefile.Zip';
    }
    </script>
1
Dan

ダイナミックリンクを使用してダウンロードをトリガーしようとする場合、ブラウザ間で一貫して動作させるのは難しいです。

IE10 +でPDFのダウンロードに問題が発生し、 @ dandavis 'download関数を使用しました(- https://github.com/rndme/download =)。

IE10 +にはmsSaveBlobが必要です。

1
Nelu

これがすべてのブラウザで機能することを願っています。自動ダウンロードのタイミングを設定することもできます。

<html>
<head>
<title>Start Auto Download file</title>
<script src="http://code.jquery.com/jquery-3.2.1.min.js"></script>
<script>
$(function() {
$('a[data-auto-download]').each(function(){
var $this = $(this);
setTimeout(function() {
window.location = $this.attr('href');
}, 2000);
});
});
</script>
</head>
<body>
<div class="wrapper">
<p>The download should start shortly. If it doesn't, click
<a data-auto-download href="auto-download.Zip">here</a>.</p>
</div>
</body>
</html>

Demo Here

1
M. Lak

素敵なjqueryソリューション:

jQuery('a.auto-start').get(0).click();

<a>タグ内でダウンロード用に別のファイル名を設定することもできます。

Your download should start shortly. If not - you can use
<a href="/attachments-31-3d4c8970.Zip" download="attachments-31.Zip" class="download auto-start">direct link</a>.
0
Somerussian