7 Stimmen

Erstellen Sie ein neues Fenster mit jQuery

Ich arbeite an einem kleinen Projekt in JavaScript/jQuery.

Um Ergebnisse einer in JavaScript durchgeführten Berechnung anzuzeigen, möchte ich ein neues Fenster mit vordefiniertem Inhalt öffnen und diesen Inhalt ändern, um die Ergebnisse anzuzeigen: Ich verwende Code wie diesen:

var resultwindow = window.open('result.html')
var doc = $('body', resultwindow.document);
doc.append("Ergebnis")

Dies funktioniert nicht, da das Ergebnisdokument noch nicht geladen ist, wenn ich den Inhalt einfüge, wird er also mit dem Inhalt von 'result.html' überschrieben.

Ich habe auch versucht

$(resultwindow.document).ready(function() {
    // ... Ergebnisdokument hier ausfüllen
})

und

$(resultwindow.document).load(function() {
    // ... Ergebnisdokument hier ausfüllen
})

aber ready() funktioniert nur im aktuellen Dokument (es wird sofort aufgerufen, wenn das aktuelle Dokument bereits geladen ist), und load wird überhaupt nicht aufgerufen.

Vielleicht kann mich jemand in die richtige Richtung weisen. Vielen Dank im Voraus!

BEARBEITEN:

Ich habe dies schließlich gelöst, indem ich das neue Dokument "manuell" in Javascript erstellt habe, wie:

w = window.open('','newwinow','width=800,height=600,menubar=1,status=0,scrollbars=1,resizable=1);
d = w.document.open("text/html","replace");
d.writeln('' +
  '' +
  +'');
// Verwenden Sie d, um das DOM des neuen Dokuments zu manipulieren und Ergebnisse anzuzeigen

Wenn ich heute dasselbe tun würde (zwei Jahre Erfahrung später), würde ich eine Javascript-Template-Bibliothek wie Handlebars verwenden, um ein Template zu pflegen und es zu JavaScript zu kompilieren.

2voto

Josh Stodola Punkte 79569

Ihr load-Aufruf funktioniert nicht, weil Sie versuchen, das Laden des Dokuments zu verarbeiten, und wahrscheinlich existiert das Dokument zu diesem Zeitpunkt noch nicht einmal. Das bedeutet, dass Sie null an jQuery übergeben und es höflich ignoriert. Behandeln Sie stattdessen das Laden-Ereignis des rohen Fensterbezugs und dann sollten Sie bereit sein zu gehen...

var win = window.open("result.html");
$(win).load(function() {
  $("body").append("Ergebnis");
});

1voto

Sean Vieira Punkte 147654

Das Problem, das Sie haben, ist, dass load() nicht das tut, was Sie denken.

Verwenden Sie stattdessen bind("load", function() { /* Ihre Funktion hier */ }); dann sollte alles funktionieren.


Korrektur:

load() ist tatsächlich eine Funktion mit zwei Verwendungen - wenn sie mit einer Funktion als erstem Parameter aufgerufen wird, bindet sie diese an das Load-Ereignis des betreffenden Objekts (oder Objekte), andernfalls lädt sie die zurückgegebenen Daten (falls vorhanden) in die betreffenden Elemente. Sehen Sie sich Josh's Antwort für den wirklichen Grund an, warum es nicht funktioniert.

0voto

Harv Punkte 556

Sende die Daten im Querystring an result.html und lass result.html dann die Daten von dort anzeigen. Wenn du weniger offensichtlich sein möchtest, könntest du die Daten im Querystring hashen und die Ergebnisseite wieder entschlüsseln lassen.

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