it-swarm.com.de

Prüfen Sie, ob eine Datei lokal vorhanden ist und nur JavaScript verwendet wird

Ich möchte prüfen, ob eine Datei lokal existiert, in der sich die HTML-Datei befindet. Es muss JavaScript sein. JavaScript wird niemals deaktiviert. jQuery ist nicht gut, kann aber.

Ich mache übrigens eine Titan-App für Mac, also suche ich nach einer Möglichkeit, meine Dateien vor Leuten zu schützen, die auf "Paketinhalt anzeigen" klicken.

14
ExceptionSlayer

Ihre Frage ist mehrdeutig, daher gibt es mehrere mögliche Antworten, je nachdem, was Sie wirklich erreichen wollen.

Wenn Sie gerade eine Desktop-Anwendung mit Titanium entwickeln, können Sie mit dem getFile des FileSystem-Moduls das Dateiobjekt abrufen und mit der vorhandenen Methode prüfen, ob es vorhanden ist.

Hier ein Beispiel von der Appcelerator-Website:

var homeDir = Titanium.Filesystem.getUserDirectory();
var mySampleFile = Titanium.Filesystem.getFile(homeDir, 'sample.txt');

if (mySampleFile.exists()) {
    alert('A file called sample.txt already exists in your home directory.');
    ...
}

Überprüfen Sie die Referenzdokumentation der getFile-Methode

Und die existiert Methode Referenzdokumentation

Für diejenigen, die dachten, dass er nach einer gewöhnlichen Webentwicklungssituation fragt, dann sind dies die zwei Antworten, die ich gegeben hätte:

1) Sie möchten prüfen, ob eine serverseitige Datei vorhanden ist. In diesem Fall können Sie eine Ajax-Anfrage verwenden. Versuchen Sie, die Datei abzurufen und auf die erhaltene Antwort zu reagieren. Beachten Sie jedoch, dass Sie nur nach Dateien suchen können, die von Ihrem Webserver verfügbar gemacht werden. Ein besserer Ansatz wäre, ein serverseitiges Skript (z. B. PHP) zu schreiben, das die Überprüfung für Sie vornimmt, einen Dateinamen angibt und dieses Skript über ajax aufruft. Beachten Sie außerdem, dass Sie sehr leicht eine Sicherheitslücke in Ihrer Anwendung/Ihrem Server schaffen können, wenn Sie nicht vorsichtig genug sind.

2) Sie möchten prüfen, ob eine clientseitige Datei vorhanden ist. In diesem Fall ist es, wie Sie von anderen erwähnt haben, aus Sicherheitsgründen nicht zulässig (obwohl IE dies in der Vergangenheit über ActiveX und die Scripting.FileSystemObject-Klasse erlaubt hat), und es ist gut so (niemand möchte Sie Um ihre Akten durchgehen zu können), vergessen Sie dies.

15
dSebastien

Da 'Kranu' hilfreiche Ratschläge gibt 'Die einzige Interaktion mit dem Dateisystem ist das Laden von js-Dateien. . . ', was darauf hindeutet, dass dies bei einer Fehlerprüfung der Fall wäre, würde Ihnen zumindest sagen, ob die Datei nicht vorhanden ist - was für Ihre Zwecke ausreichend sein könnte?

Von einer local - Maschine aus können Sie prüfen, ob eine Datei nicht vorhanden ausführt, indem Sie versuchen, sie als externes Skript zu laden und auf Fehler zu prüfen. Zum Beispiel:

<span>File exists? </span>
<SCRIPT>
    function get_error(x){
        document.getElementsByTagName('span')[0].innerHTML+=x+" does not exist.";
    }
    url="   (put your path/file name in here)    ";
    url+="?"+new Date().getTime()+Math.floor(Math.random()*1000000);
    var el=document.createElement('script');
    el.id="123";
    el.onerror=function(){if(el.onerror)get_error(this.id)}
    el.src=url;
    document.body.appendChild(el);
</SCRIPT>

Einige Notizen... 

  • hängen Sie einige zufällige Daten an den Dateinamen an (URL + = "?" + neues Datum usw.), damit der Browser-Cache kein altes Ergebnis liefert.
  • legen Sie eine eindeutige Element-ID (el.id =) fest, wenn Sie dies in einer Schleife verwenden, damit die Funktion get_error auf das richtige Element verweisen kann.
  • die Einstellung der Zeile onerror (el.onerror = function) ist ein komplizierter Vorgang, da die get_error-Funktion aufgerufen werden muss und el.id übergeben werden muss, wenn nur ein normaler Verweis auf die Funktion (z. B. el.onerror = get_error) gesetzt wurde. dann konnte kein el.id-Parameter übergeben werden.
  • denken Sie daran, dass dies nur prüft, ob eine Datei nicht vorhanden ist.
10
Siubear

Sie können dies verwenden

function LinkCheck(url)
{
    var http = new XMLHttpRequest();
    http.open('HEAD', url, false);
    http.send();
    return http.status!=404;
}
8
Jess Stone

Javascript kann nicht auf das Dateisystem zugreifen und auf Existenz prüfen. Die einzige Interaktion mit dem Dateisystem ist das Laden von js-Dateien und Bildern (png/gif/etc). 

Javascript ist nicht die Aufgabe dafür

4
Kranu

Wenn Sie prüfen möchten, ob eine Datei mit Javascript vorhanden ist, dann nein, soweit ich weiß, hat Javascript aus Sicherheitsgründen keinen Zugriff auf das Dateisystem ... Aber für mich ist es nicht klar genug, was Sie tun möchten ..

3
Andrey

Glücklicherweise ist es aus Sicherheitsgründen nicht möglich, mit Standard-JS auf das clientseitige Dateisystem zuzugreifen. Es gibt jedoch einige proprietäre Lösungen (z. B. die IE-only-ActiveX-Komponente von Microsoft). 

3
John Manak

Eine Alternative: Sie können ein "verstecktes" Applet-Element verwenden, das diese Existenzprüfung mit einem privilegierten Aktionsobjekt implementiert und Ihre Laufmethode überschreibt durch:

File file = new File(yourPath);
return file.exists();
2
Samsky

Eine Methode, die ich dazu gefunden habe, ist das Erstellen eines img-Tags und das src-Attribut auf die Datei setzen, nach der Sie suchen. Der Onload oder Onerror des img-Elements wird abhängig davon ausgelöst, ob die Datei vorhanden ist. Sie können mit dieser Methode keine Daten laden, Sie können jedoch feststellen, ob eine bestimmte Datei vorhanden ist oder nicht.

1
MEC

Versuche dies:

window.onclick=(function(){
  try {
    var file = window.open("file://mnt/sdcard/download/Click.ogg");
    setTimeout('file.close()', 100);
    setTimeout("alert('Audio file found. Have a Nice day!');", 101);
  } catch(err) {
    var wantstodl=confirm("Warning:\n the file, Click.ogg is not found.\n do you want to download it?\n "+err.message);
    if (wantstodl) {
      window.open("https://www.dropbox.com/s/qs9v6g2vru32xoe/Click.ogg?dl=1"); //downloads the audio file
    }
  }
});
0
Samuel Tees