Wie kann ich einen Benutzer zum Herunterladen auffordern, wenn er auf einen Link klickt?
Zum Beispiel anstelle von:
<a href="uploads/file.doc">Download Here</a>
Ich könnte benutzen:
<a href="#">Download Here</a>
$('a').click... //Some jquery to download the file
Auf diese Weise indiziert Google meine HREFs und privaten Dateien nicht.
Kann dies mit jQuery gemacht werden, wenn ja, wie? Oder sollte dies stattdessen mit PHP oder so gemacht werden?
Antworten:
Ich könnte dies als eine anmutigere, erniedrigende Lösung vorschlagen, indem ich Folgendes verwende
preventDefault
:Selbst wenn es kein Javascript gibt, erhält der Benutzer zumindest auf diese Weise ein Feedback.
quelle
Wenn Sie nicht möchten, dass Suchmaschinen bestimmte Dateien indizieren, können Sie robots.txt verwenden , um Webspinnen anzuweisen, nicht auf bestimmte Teile Ihrer Website zuzugreifen.
Wenn Sie sich nur auf Javascript verlassen, können einige Benutzer, die ohne Javascript surfen, nicht auf Ihre Links klicken.
quelle
robots.txt
würde dies nicht helfen, da sie weiterhin im Browserverlauf und auf den Zwischenservern gespeichert sind.Hier ist ein schöner Artikel, der viele Möglichkeiten zum Ausblenden von Dateien vor Suchmaschinen zeigt:
JavaScript ist kein guter Weg, um eine Seite nicht zu indizieren. Es wird Benutzer nicht daran hindern, direkt auf Ihre Dateien zu verlinken (und sie somit Crawlern zugänglich zu machen), und wie Rob erwähnte, würde dies nicht für alle Benutzer funktionieren.
Eine einfache Lösung besteht darin, das
rel="nofollow"
Attribut hinzuzufügen , obwohl es ohne robots.txt nicht vollständig ist.quelle
Ja, Sie müssten die Datei window.location.href in die URL der Datei ändern, die Sie herunterladen möchten.
quelle
quelle
$('blah').each(function(){ $('body').append('<a href="'+xxx+'" download="'+dynamicname+'" />'); }) $('a').trigger('click');
Ich habe das benutzt.Verwenden der jQuery-Funktion
quelle
Indem
window.location.href = 'uploads/file.doc';
Sie angeben , zeigen Sie, wo Sie Ihre Dateien speichern. Sie können natürlich .htacess verwenden, um das erforderliche Verhalten für gespeicherte Dateien zu erzwingen, aber dies ist möglicherweise nicht immer eine Handvoll.Es ist besser, eine serverseitige PHP-Datei zu erstellen und diesen Inhalt darin abzulegen:
Dieser Code gibt JEDE Datei als Download zurück, ohne anzuzeigen, wo Sie sie tatsächlich speichern.
Sie öffnen diese PHP-Datei über
window.location.href = 'scripts/this_php_file.php?f=downloaded_file';
quelle
Versteckte Iframes können helfen
quelle
Ich schlage vor, Sie verwenden das Mousedown-Ereignis, das VOR dem Klickereignis aufgerufen wird. Auf diese Weise behandelt der Browser das Klickereignis auf natürliche Weise, wodurch jegliche Code-Verrücktheit vermieden wird:
quelle
Einen ähnlichen Beitrag zur Verwendung von jQuery zum Löschen von Formularen finden Sie hier: Zurücksetzen eines mehrstufigen Formulars mit jQuery
Möglicherweise tritt auch ein Problem auf, bei dem die Werte vom Wertestapel der Streben neu gefüllt werden. Mit anderen Worten, Sie senden Ihr Formular, tun alles in der Aktionsklasse, löschen jedoch nicht die zugehörigen Feldwerte in der Aktionsklasse. In diesem Szenario scheint das Formular die zuvor übermittelten Werte beizubehalten. Wenn Sie diese auf irgendeine Weise beibehalten, setzen Sie einfach jeden Feldwert in Ihrer Aktionsklasse nach dem Fortbestehen und vor der Rückgabe von SUCCESS auf Null.
quelle