ユーザーがリンクをクリックしたときに、ダウンロードを促す方法はありますか。
たとえば、次の代わりに:
<a href="uploads/file.doc">Download Here</a>
私が使用できます:
<a href="#">Download Here</a>
$('a').click... //Some jquery to download the file
このように、Googleは私のHREFとプライベートファイルのインデックスを作成しません。
これはjQueryで実行できますか?または、これをPHPまたは何かで行う必要がありますか?
preventDefault
を使用して、これをより優雅に劣化させるソリューションとして提案するかもしれません。
$('a').click(function(e) {
e.preventDefault(); //stop the browser from following
window.location.href = 'uploads/file.doc';
});
<a href="no-script.html">Download now!</a>
Javascriptがなくても、少なくともこの方法でユーザーはフィードバックを得ることができます。
検索エンジンで特定のファイルのインデックスを作成したくない場合は、 robots.txt を使用して、WebスパイダーにWebサイトの特定の部分にアクセスしないように指示できます。
JavaScriptのみに依存している場合、JavaScriptなしで閲覧する一部のユーザーはリンクをクリックできません。
検索エンジンからファイルを隠すための多くの方法を示す素敵な記事があります:
JavaScriptは、ページのインデックスを作成しない良い方法ではありません。ユーザーがファイルに直接リンクすることを妨げることはなく(したがって、クローラーに公開することもありません)、Robが述べたように、すべてのユーザーに対して機能するわけではありません。
簡単な修正方法は、rel="nofollow"
属性を追加することです。ただし、robots.txtがないと完了しません。
<a href="uploads/file.doc" rel="nofollow">Download Here</a>
はい、window.location.hrefをダウンロードするファイルのURLに変更する必要があります。
window.location.href = 'http://www.com/path/to/file';
var link=document.createElement('a');
document.body.appendChild(link);
link.href=url;
link.click();
window.location.href = 'uploads/file.doc';
と記述することで、ファイルの保存場所を示します。もちろん、.htacessを使用して、保存されたファイルに必要な動作を強制することもできますが、これは必ずしも手間がかかるとは限りません。
サーバー側のphpファイルを作成し、このコンテンツをその中に配置することをお勧めします。
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.$_REQUEST['f']);
readfile('../some_folder/some_subfolder/'.$_REQUEST['f']);
exit;
このコードは、実際にどこに保存したかを示すことなく、すべてのファイルをダウンロードとして返します。
このphpファイルをwindow.location.href = 'scripts/this_php_file.php?f=downloaded_file';
経由で開きます
JQuery関数を使用する
var valFileDownloadPath = 'http//:'+'your url';
window.open(valFileDownloadPath , '_blank');
非表示のiframe が役立ちます
Clickdownイベントの前に呼び出されるmousedownイベントを使用することをお勧めします。このようにして、ブラウザはクリックイベントを自然に処理し、コードの奇妙さを回避します。
(function ($) {
// with this solution, the browser handles the download link naturally (tested in chrome and firefox)
$(document).ready(function () {
var url = '/private/downloads/myfile123.pdf';
$("a").on('mousedown', function () {
$(this).attr("href", url);
});
});
})(jQuery);
JQueryを使用したフォームのクリアに関する同様の投稿については、こちらを参照してください。 jQueryを使用したマルチステージフォームのリセット
また、値がstruts値スタックによって再入力されるという問題に直面している可能性があります。つまり、フォームを送信し、アクションクラスで何でもしますが、アクションクラスの関連フィールド値はクリアしません。このシナリオでは、フォームは以前に送信した値を保持しているように見えます。これらを何らかの方法で永続化する場合は、永続化後、SUCCESSを返す前に、アクションクラスの各フィールド値をnullにします。