Compte tenu de l'exemple suivant
<img id="my_img" src="images/current.png" />
<script language="javascript">
var i = document.getElementById('my_img');
var filetime = i.is_there_any_method_for_this(); // ?????
i.title = 'image created: ' + filetime; // don't care about formating now
</script>
7 Réponses :
Ce n'est pas possible, car le client (où le JavaScript est exécuté) est envoyé une copie du fichier, sans le nom de fichier ou méta réel du serveur. La seule façon de rendre possible est si le serveur déclare volontiers les attributs de fichier d'une manière dont le client peut rechercher - mais vous devez pouvoir contrôler le code du serveur pour pouvoir le faire. P>
L'élément d'image dans la spécification DOM n'a pas de propriété pour le temps de fichier des images afin que vous ne puissiez pas l'obtenir à partir d'une propriété DOM directe de l'élément d'image. P>
De nombreuses images enregistrées par des caméras numériques contiennent des métadonnées (exif) qui ont une durée de création de fichier. Il est possible d'utiliser JavaScript pour lire les métadonnées Exif et lisez le temps de création de l'EXIF. En fait, certains plug-ins de navigateur vous montrent ce type de métadonnées à partir d'images dans le navigateur. P>
tandis que cela n'est pas possible pour les images chargées de manière conventionnelle dans le cadre du code HTML, vous pouvez récupérer la date / heure de la dernière modification d'une image si vous le chargez sur Ajax (fournissant le serveur envoie ces informations d'en-tête).
$.get('path/to/img').done(function(response, result, xhr) {
alert("last modified "+xhr.getResponseHeader('last-modified'));
});
Vous devez expliquer comment un serveur (peut-être apache) pourrait envoyer l'en-tête approprié pour en faire une solution complète - alors je voterais pour vous, ~)
Ajax Head serait plus approprié à mon avis
@BillyMoon - Pour être honnête, je ne connais pas la réponse à cela, je ne suis pas un gars serveur. Je sais juste que cela a tendance à apparaître dans les en-têtes de réponse Ajax.
Vous pouvez obtenir les détails en utilisant quelque chose comme ceci:
var fso, f, s;
fso = new ActiveXObject("Scripting.FileSystemObject");
f = fso.GetFile(filespec);
s = f.Path.toUpperCase() + "<br>";
s += "Created: " + f.DateCreated + "<br>";
s += "Last Accessed: " + f.DateLastAccessed + "<br>";
s += "Last Modified: " + f.DateLastModified
Cela suppose que l'image est sur la machine que vous accédez à la page Web de. Je doute que c'est la situation de notre intervenant.
Où définissez-vous f code>?
Selon le type de fichier IMG, vous pouvez le télécharger et récupérer des informations méta dans certains en-tête (au format dépendant). P>
Mais comme cela a été mentionné, certains Ajax, par exemple, le feront pour vous. P>
Il transporte que Apache semble envoyer la dernière fois modifiée sous forme d'en-tête par défaut. Obtenir cette en-tête n'est pas possible simplement en utilisant une méthode JavaScript que vous décrivez. Vous pouvez le faire de manière non 100% fiable ou efficace en téléchargeant le fichier à l'aide de AJAX et en vérifiant la dernière heure modifiée de l'image de nouveau téléchargée (qui sera presque toujours la même que l'original).
Utilisation d'un peu de jQuery pour l'appel Ajax ... p> Cette méthode ne fonctionnera que lorsque le serveur envoie le bon Si possible - je pense qu'une meilleure solution est de Obtenez le serveur pour exposer les horodatages des fichiers via un petit flux de données, peut-être envoyer un JSON montrant des métadonnées de dernière modification et d'autres métadonnées pour chaque fichier en fonction du nom de fichier en tant que clé ... Le serveur doit donc envoyer quelque chose comme ceci: p> qui serait alors facile à analyser le côté client (en utilisant en-tête correct code>, et il pourrait être différent (bien que généralement pas) que l'image précédemment chargée et provoque un trafic supplémentaire et des demandes en téléchargeant l'image que vous souhaitez l'horodatage pour. p> json.parse () code>) et déterminez tous les fichiers dont vous avez besoin - plus efficacement et plus efficacement habilement. p> p>
Vérifié le code de code / img, fenêtre utilisée.Settimeout au lieu de $ get ... Mais comme cela dépend du logiciel / comportement du serveur (et que le serveur est au-delà de mon contrôle) Je suppose qu'il n'y a pas de solution fiable de toute façon ... Néanmoins merci beaucoup. ..
Que diriez-vous d'aller avec $ .ajax et limitez la demande à la tête ...
var i = document.getElementById('my_img');
var xhr = $.ajax( {
type: 'HEAD',
url: i.src,
success: function(msg) {
var filetime = xhr.getResponseHeader('Last-Modified');
i.title = 'image created: ' + filetime;
}
});