2 Stimmen

Wann öffnet sich der Dateidownload-Dialog? - HTML, Javascript

Ich habe eine Html-Seite, und wenn ich auf einen Dateilink auf der Seite klicke, erscheint der Dateidownload-Dialog, und dieser Dateidialog sperrt die Seite. Ich meine, ohne Auswahl einer der Optionen (Öffnen, Speichern, Abbrechen) kann ich nichts auf der Seite tun (was normal ist). Was ich brauche, ist, wenn javascript kann prüfen, ob die Seite gesperrt ist oder nicht. (oder ob der Dateidialog geöffnet ist?)

p.s. sagen Sie nicht "put an onclick event to the link", weil der Server sehr langsam reagieren kann (wie 30 Sekunden nach dem Klicken)

3voto

Pointy Punkte 387467

Wenn Sie wissen, dass Ihr Server eine Datei zum Herunterladen zurückgibt, können Sie devinez wenn das Dialogfeld mit diesem Trick erscheint (den ich aus einer Stackoverflow-Antwort auf eine ähnliche Frage entnommen habe, die ich gestellt habe):

  1. Wenn Sie die HTTP-Anfrage von Ihrer Seite aus stellen, fügen Sie einen Parameter hinzu, dessen Wert eine zufällige Zeichenkette ist (wie "random" + new Date().getTime() - es muss nicht sicher sein, aber Sie wollen Kollisionen vermeiden)

  2. Der Server sucht nach diesem Parameter. Wenn er beginnt, den Anhang zum Herunterladen zurückzusenden, fügt er ein Cookie mit Ihrer zufälligen Zeichenfolge als Wert hinzu.

  3. Nachdem die Seite die HTTP-Anfrage gestellt hat, startet sie einen Intervall-Timer. Der Code in der Timer-Funktion prüft document.cookie auf der Suche nach dieser zufälligen Zeichenfolge. Sobald document.cookie diese Zeichenfolge enthält, dann wissen Sie, dass die HTTP-Antwort den Browser erreicht hat. Da Sie wissen, dass der Browser den Benutzer auffordern wird, den Anhang zu speichern, können Sie daraus schließen, dass der Dateidialog zu diesem Zeitpunkt angezeigt wird.

Was ich brauchte, war ein Weg, um mit dem IE Sicherheit Sache über Dateianhänge aus anderen Ereignissen als direkte Benutzer "Klicks" zu behandeln. Ich brauchte, um einen modalen Dialog zu schließen, so musste ich wissen, wann die HTTP-Antwort zurückkehren würde.

1voto

Felix Punkte 86442

Denn die Seite ist gesperrt können Sie mit JavaScript nichts anfangen, da es ebenfalls gesperrt ist.

Aber was wollen Sie eigentlich tun? Versuchen Sie, irgendwie die Tatsache zu protokollieren, dass der Benutzer die Datei herunterlädt? Wenn ja, gibt es dafür bessere Möglichkeiten, und zwar auf der Server-Seite. Verwenden Sie eine serverseitige Skriptsprache, um die Datei bereitzustellen und die Tatsache zu protokollieren, dass sie heruntergeladen wurde.

Wenn Sie das nicht vorhaben, können Sie nur Folgendes verwenden onclick auf den Link oder onunload / onbeforeunload Diese sind jedoch weniger zuverlässig und ich bin sicher, dass Sie bei verschiedenen Browsern ein völlig anderes Verhalten feststellen werden.

Wenn ich es mir recht überlege, gibt es noch eine weitere Möglichkeit, aber die ist sehr schmutzig . Die Idee ist, ein Intervall festzulegen, das jede Sekunde ausgeführt wird, und zu prüfen, ob zwischen zwei Durchläufen mehr als eine Sekunde vergangen ist. Etwas wie:

var lastTime = new Date().getTime();
function checkTime() {
    var curTime = new Date().getTime();
    if (curTime - lastTime > 1100) { // 1100 because there might be small browser lags 
        // do something after the dialog appeared and the user did something with it
    }
    lastTime = curTime;
}
setInterval(checkTime, 1000);

Bitte beachten Sie, dass es Browser gibt (Chrome ist ein Beispiel, glaube ich), die nicht Block die Seite, während dieses Dialogfeld geöffnet ist, so dass dies möglicherweise nicht funktioniert. Stellen Sie sicher, dass Sie alles doppelt überprüfen, wenn Sie dies verwenden.

Ich muss jetzt duschen gehen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X