href nachbilden
johny7
- javascript
Moin allerseits,
Wie kann ich mit JavaScript die Link-Funktion nachbilden? Ich arbeite sehr viel mit jQuery.
Hintergrund: In meiner Applikation verwende ich verschiedene Protokolle, um verschiedene Aktionen zu realisieren. So erzeugt z.B. ein Link mit bereich:// ein neues div in der Mitte und lädt dorthin Dateien per AJAX.
Nun will ich, dass die dynamisch nachgeladenen Inhalte in PDF verarbeitet werden. Dafür habe ich einen Link mit dem Protokoll export:// gemacht. Beim KLick auf diesen Link wird das HTML eines bestimmten Bereiches auf der Seite ausgelesen und per AJAX als POST an eine PHP-Datei geschickt. Dort wird eine Ausgabe erzeugt (z.B. eine PDF-Datei) und temporär gespeichert, der Pfad zu dieser temporären Datei wird an meine Anwendung zurückgegeben.
Jetzt will ich diese Datei aufrufen. Wie bewerkstellige ich das? Ich habe schon versucht, einen Link zu erzeugen und einen Klick-Event darauf zu triggern. Aber bei HTTP passiert nichts. Wenn der Link, der erzeugt wird eins meiner eigener Protokolle hat, reagiert er korrekt. Aber wenn er das http-Protokoll hat, reagiert er nicht auf trigger(), sondern nur auf einen echten Klick mit der Maus.
Ein location.href() will ich nicht machen, weil dann alle anderen Änderungen in meiner Applikation verloren gehen. Mit window.open() klappt's, nur wird das als Popup geblockt und muss freigegeben werden.
Wie also bekomme ich hin, dass nach dem Abschicken des HTML per POST die URL, die zurückgegeben wird, in einem neuen Fenster aufgerufen wird?
Die JavaScript - Funktion:
$('a').click(
function(evt)
{
// Die URL in Bestandteile zerlegen
var href = parseUri($(this).attr("href"));
// bei Export-Protokoll
if (href['protocol']=="export")
{
// Standard-Reaktion wird unterbunden
evt.preventDefault();
// HTML wird ausgelesen
var bereich = $('#blabla').html();
$.ajax(
{
url : 'exportiere2pdf.php',
data : { 'html' : bereich },
type : 'post'
success : function (data)
{
// In data habe ich die URL zur temporären Datei.
// Wie rufe ich diese Datei nun auf?
}
}
);
}
if (href['protocol']=="bereich")
{
// Spezielle Aktionen zum Nachladen von Teilkomponenten per AJAX
evt.preventDefault();
}
}
);
Die Standard-Aktion wird nur bei den besonderen Protokollen unterbunden. D.h. http müsste normal funktionieren. Wenn ich aber in der Funktion nach success einen Link mit http:// erzeuge und ihn mit click triggere, reagiert er nicht. Ein Link mit bereich:// reagiert aber auf den Trigger.
Ich hoffe, mein Problem sauber beschrieben zu haben.
Grüße, JN
Die Funktionalität eines Links bildet JavaScript mit
location.href = linkurl;
bzw. im Falle von target="_blank" mit window.open ab.
Gruß, LX
Moin allerseits,
Die Funktionalität eines Links bildet JavaScript mit
location.href = linkurl;
bzw. im Falle von target="_blank" mit window.open ab.
Also nichts Neues...
Muss also an jedem neuen Arbeitsplatz vom Benutzer quittiert werden, dass Popups hier zulässig sind...
Egal, ich glaube, das Problem erübrigt sich eh. Komisch ist nur, das JavaScript so sonderbar mit den Events umgeht. Woran könnte das evtl. liegen?
Grüße, JN
Hallo,
Die Funktionalität eines Links bildet JavaScript mit
location.href = linkurl;
ohne Popup ...
bzw. im Falle von target="_blank" mit window.open ab.
Muss also an jedem neuen Arbeitsplatz vom Benutzer quittiert werden, dass Popups hier zulässig sind...
Ja, ich bedaure auch, dass die meisten Browser bei Links mit target="_blank" den Popup-Blocker umgehen.
Egal, ich glaube, das Problem erübrigt sich eh. Komisch ist nur, das JavaScript so sonderbar mit den Events umgeht.
Mit welchen Events? Inwiefern komisch?
Ciao,
Martin
$('a').click(
if (href['protocol']=="export")
Nebst deinem durch LX bereits gelösten Problem: den Attributselektor kennst du?
Moin allerseits,
$('a').click(
if (href['protocol']=="export")Nebst deinem durch LX bereits gelösten Problem: den Attributselektor kennst du?
Ja klar. Verwende ich doch auch in meinem Beispiel, oder worauf willst du hinaus? Mit parseUri() zerteile ich es nur so, dass ich bequem damit hantieren kann.
Grüße, JN
Nebst deinem durch LX bereits gelösten Problem: den Attributselektor kennst du?
Ja klar. Verwende ich doch auch in meinem Beispiel
äh, nein?
oder worauf willst du hinaus?
Du kannst dir die Verzweigung sparen, wenn du gleich den Attributselektor verwendest und das click-Event somit nur an die Elemente bindest, die es wirklich brauchen.