XHTMLforum

XHTMLforum (http://xhtmlforum.de/index.php)
-   Javascript & Ajax (http://xhtmlforum.de/forumdisplay.php?f=83)
-   -   Übergabe des href an die JS-Function klappt nicht (http://xhtmlforum.de/showthread.php?t=70148)

Kangooroo 18.10.2013 10:25

Übergabe des href an die JS-Function klappt nicht
 
Hallo zusammen

Ich suche schon seit Stunden... aber das gejammer kennt ihr sicher alle schon.

Meine Zielsetzung:
Ich habe einen simplen Filemanager für Up/Downloads zum Dokumente-Austausch erstellt. In diesem gibts auch eine Löschfunktion. Diese wird auf einer anderen Seite via Parameterübergabe (Dateipfad auf dem Server) ausgeführt. Vor dem Löschen erscheint ein Dialog "Löschen: JA / NEIN". Erst danach wird auf die Lösch-Seite weitergeleitet.

Das funktioniert alles:
Der Filemanager und die Löschfunktion passen wunderbar zusammen. Nur schade ist, dass keine "Sind Sie sicher?"-Abfrage kommt. Dateien könnten so schnell mal aus Versehen gelöscht werden. Also habe ich eine simple Lösung gefunden, welche optisch auch noch gut aussieht: jQuery msgBox. Diese habe ich eingebunden und wird auch angezeigt.

Alternativ dazu könnte ich auch die jQuery-Dialogbox nehmen. Dialog | jQuery UI. Ich denke aber nicht, dass sich so mein Problem lösen würde.

Mein Problem:
Wenn ich auf JA, Datei löschen klicke, wird der Browser an die URL www.meine-url.ch/undefined weitergeleitet. Aus meiner Sicht wird der Link (HREF) nicht an die JS-Function übergeben. Das Problem liegt also nicht am Filemanager, an der Löschfunktion oder an der Message-Box. Unten die Ausschnitte aus dem Code. Ich vermute, dass ich einen Anfängerfehler gemacht habe. Aber im Moment sitze ich mit meinen Gedanken in einer Sackgasse fest und komme nicht weiter.

JavaScript im Head:
Code:

<script type="text/javascript">
function fragebox() {
        $.msgBox({
                title: "Datei l&ouml;schen",
                content: "Wollen Sie diese Datei wirklich unwiederruflich l&ouml;schen?",
                type: "confirm",
                buttons: [{ value: "Ja" }, { value: "Nein" }],
                success: function (result) {
                if (result == "Ja") {
                        window.location.href = this.href;
                        }
                }
        });
}
</script>

Delete-Link im BODY:
HTML-Code:

<a href="http://www.meine-url.ch/filemanager_delete.asp?PATH=d:\meine-url\files\unterordner\dateiname.pdf" onClick="fragebox(); return false;">
    <img src="http://www.meine-url.ch/template/design/delete.png" alt="">
</a>

Ich hoffe auf Unterstützung und bedanke mich schon jetzt für Eure Bemühungen.

Gruss
Kangooroo

explanator 18.10.2013 15:11

Lösch- und Updateaktionen sollten niemals per GET sondern immer per POST übertragen werden. Allein schon der Sicherheit wegen.

Jörg 18.10.2013 16:19

"this" ist in deinem Fall nicht der link. Daher kann das nicht funktionieren. Du müsstest schon "this" als Parameter in der onClick Anweisung angeben. Da ist aber komplett was im Argen. Gerade mit JQuery gibts da einige Möglichkeiten das zu lösen.

Hier die einfachste Möglichkeit, aber nicht die eleganteste:

Code:

<a href="javascript:fragebox('http://www.meine-url.ch/filemanager_delete.asp?PATH=d:\\meine-url\\files\\unterordner\\dateiname.pdf')">
    <img src="http://www.meine-url.ch/template/design/delete.png" alt="">
</a>


die Funktion umbauen:
Code:

function fragebox(url) {
        $.msgBox({
                title: "Datei l&ouml;schen",
                content: "Wollen Sie diese Datei wirklich unwiederruflich l&ouml;schen?",
                type: "confirm",
                buttons: [{ value: "Ja" }, { value: "Nein" }],
                success: function (result) {
                if (result == "Ja") {
                        window.location.href = url;
                        }
                }
        });
}

Achte auf die doppelten \ in der URL.

oder auch so:

Code:

<a href="http://www.meine-url.ch/filemanager_delete.asp?PATH=d:\meine-url\files\unterordner\dateiname.pdf" onClick="fragebox(this); return false;">
    <img src="http://www.meine-url.ch/template/design/delete.png" alt="">
</a>
function fragebox(elm) {
        $.msgBox({
                title: "Datei l&ouml;schen",
                content: "Wollen Sie diese Datei wirklich unwiederruflich l&ouml;schen?",
                type: "confirm",
                buttons: [{ value: "Ja" }, { value: "Nein" }],
                success: function (result) {
                if (result == "Ja") {
                        window.location.href = elm.href;
                        }
                }
        });
}

oder

Code:

window.location.href = $(elm).attr('href');

Kangooroo 18.10.2013 22:30

@Jörg
Danke für Deine Unterstützung. Ich werde es in Kürze ausprobieren und berichten.

@explanator
Das ist mir schon auch bewusst. Die ganze Oberfläche verbirgt sich aber hinter einem Login. Und die Dateien auf dem Server sind i.d.R. PDF-Dateien mit sehr geringem Geheimhaltungsgrad sowie niedrigem Informationswert für Aussenstehende.

Gruss
Kangooroo

protonenbeschleuniger 20.10.2013 11:03

Es geht nicht um Geheimhaltung, sondern darum dass die Daten nicht (aus versehen) gelöscht werden. Aber wenn das auch egal ist...

Kangooroo 20.10.2013 11:20

Ja, deshalb eben die Confirmation-Box. 8)

Jörg 20.10.2013 11:22

Mal abgesehen davon, dass ich auch über Ajax posten würde - schon allein um den Prozess im Hintergrund halten zu können, spielt das eigentlich nicht wirklich eine große Rolle. Solange die delete URL nicht öffentlich aufrufbar ist und kein gültiger Parameter übergeben wird.

Selbst mit F5 (oder Browser Back Button) kann man bei dieser Lösung nicht mehr viel Schaden anrichten, die Datei ist ja schon gelöscht. Ob das jetzt elegant ist, ist wieder eine ganze andere Frage.


Mit Ajax und JQuery könntest du das schon besser lösen, da du dann die Seite nicht verlassen musst und auch auf mögliche Fehler reagieren könntest. Aber wenns es nur ein kleines Projekt ist, dann funktioniert das wie oben beschrieben schon so.


@protonenbeschleuniger
oder was genau sind deine Bedenken?

protonenbeschleuniger 20.10.2013 14:20

Zitat:

Zitat von Kangooroo (Beitrag 534415)
Ja, deshalb eben die Confirmation-Box. 8)

Was genau nichts nutzt.

Solche URL landen im Logfile und bieten dann potentiell eine Falle, da manchmal solche Logfiles ausgewertet werden und dann sind URLs öffentlich machen.

Es ist einfach eine potentielle Falle, in die auch schon Profis hingetappt sind.

explanator 20.10.2013 15:33

Zitat:

Zitat von Kangooroo (Beitrag 534345)
Der Filemanager und die Löschfunktion passen wunderbar zusammen. Nur schade ist, dass keine "Sind Sie sicher?"-Abfrage kommt. Dateien könnten so schnell mal aus Versehen gelöscht werden.

Problem schon mal richtig erkannt. Aber Javascript bietet keine Sicherheit.
Bots, Suchmaschinencrawler sowie Browser-Add-ons kennen kein Erbarmen und folgen gnadenlos jeden Link.

Einziger Schutz. Daten per POST senden und allen von aussen hereinkommenden Angaben zu misstrauen.

Kangooroo 20.10.2013 22:38

Danke für die Ratschläge. Ich erklär kurz im Detail, wie's mit der gesamten Geschichte aussieht:
  • Die Website arbeitet serverseitig mit ASP
  • Der Filemanager ist hinter einem Login
  • Nur ein einziger Nutzer benutzt dieses Login
  • Alle Seiten innerhalb des Logins werden auf eine gültige Session geprüft
  • Die Löschfunktion ist eine eigenständige Seite ohne HTML-Inhalt. Also nur ASP
  • Löschen ohne gültige Session wird nicht ausgeführt, sondern der User wird zur Login-Seite umgeleitet

Ich hoffe, ich konnte Eure Bedenken minimieren. An der Sicherheit könnte ich noch hochschrauben, ist aber echt nicht nötig. Danke nochmlas für Eure Inputs.

Gruss
Kangooroo

Kangooroo 21.10.2013 09:16

Hallo Jörg
Danke für Deine Unterstützung. Die Löschfunktion läuft mit folgenden Code einwandfrei:

Zitat:

Zitat von Jörg (Beitrag 534370)
oder auch so:

Code:

<a href="http://www.meine-url.ch/filemanager_delete.asp?PATH=d:\meine-url\files\unterordner\dateiname.pdf" onClick="fragebox(this); return false;">
    <img src="http://www.meine-url.ch/template/design/delete.png" alt="">
</a>
function fragebox(elm) {
        $.msgBox({
                title: "Datei l&ouml;schen",
                content: "Wollen Sie diese Datei wirklich unwiederruflich l&ouml;schen?",
                type: "confirm",
                buttons: [{ value: "Ja" }, { value: "Nein" }],
                success: function (result) {
                if (result == "Ja") {
                        window.location.href = $(elm).attr('href');
                        }
                }
        });
}


Gruss
Kangooroo


Alle Zeitangaben in WEZ +2. Es ist jetzt 02:29 Uhr.

Powered by vBulletin® Version 3.8.11 (Deutsch)
Copyright ©2000 - 2022, vBulletin Solutions, Inc.

© Dirk H. 2003 - 2022