window.open() -> getElementById

  • Hi ihr JS-Könner :)

    Also ich habe eine Frage, bzgl. der window.open() Funktion:

    Ich erstelle mit:

    Code
    myMessageWindow = open('messages.html', 'Messages', 'resizable=no,height=300,width=500');


    ein neues Fenster in einer Methode. myMessageWindow ist eine globale var.

    Nun möchte ich gleich anschließend ein HTML-Element mittels getElementById bearbeiten - leider bekomme ich allerdings immer nur "null" zurück, wenn ich auf ein Element zugreifen will.

    Es wäre möglich, das sowas mit dem IE funktioniert, aber ich sitz hier grad an einer Chrome Extension und da funzt das nicht.
    Ich bin zugegebenermaßen nicht soooooooo fit in JS, daher brauch ich ja eure Hilfe :)
    Ich hab schon gesucht, aber leider nix gefunden.... nur eben, daß es mit dem IE zu funktionieren scheint.

    Wenn wer eine Idee hat, bitte meldet euch bei mir... (eine Idee wäre, das "onload"-Event herzunehmen??? - glaubt ihr geht das?)


    Lg
    Spite

  • Code
    var tbody = myMessageWindow.document.getElementsByTagName("tbody")[0];
    console.log(tbody);

    console.log veranlasst chrome zur ausgabe des tbody und liefert nur "undefined" - also gibts das objekt nicht oder?

    Lg
    Spite

    edit: also wie gesagt, mit einer onload function erreich ich, dass das einmal funktioniert, aber bei allen weiteren window.open's funktioniert es dann nicht mehr - vielleicht kann mir einer einen Tipp geben, wie ich dass dann machen kann (hab auch schon ein manuelles "myMessageWindow.onload();" versucht - ohne Erfolg :(

    Einmal editiert, zuletzt von Spite82 (22. Februar 2010 um 13:18)

  • Tja, mal so ausgedrückt: Ich hab keine Ahnung, aber das dürfte es "womöglich sein", denn ich schreibe - wie gesagt eine Chrome Extension, die so ausschaut.

    Ich habe ein Content-Script, welches die Elemente einer Seite untersucht und dann per "chrome.extension.sendRequest(...);" ein request an die "backgroundpage" gesendet wird. Diese ist sozusagen das "Kommunikationszentrum" einer Extension und läuft im Hintergrund - solange die Extension installiert ist (so ca.) - d.h. ich kann immer Requests hinschicken.

    Die backgroundpage empfängt den Request und öffnet mir mein Window, welches in eine globale Variable gespeichert wird (myMessageWindow).

    Ok, nun sieht es so aus: Jedes mal, wenn ich diese zu überprüfende Seite refreshe soll eben eventuell eine TableRow in meine Table hinzugefügt werden -> das geschieht auch in meinem Request in der backgroundpage.

    Ich hab im Endeffekt nur ein Problem:
    Nur wenn ich das Fenster neu öffne (window.open()) wird die TableRow nicht eingefügt. Wenn das Fenster allerdings offen ist - funktioniert alles perfekt!
    Beim ersten Öffnen der Fensters konnte ich mir selbst helfen, indem ich in dessen HTML-Code ein "onload="notifyBGPage()"" eingefügt habe und in der notifyBGPage wird wieder mittels chrome.extension.sendRequest ein request an die backgroundpage gesendet, der die entsprechende TableRow einfügt _> das funktioniert auch (auch alle weiteren Rows- solange das Fenster offen ist).

    Wenn ich allerdings das Fenster zumache - hilft mir auch mein onload nichts - weils anscheinend nicht geworfen wird..... und immer wenn ich DIREKT nach dem Erstellen des Fensters auf dessen Elements zugreifen will bekomm ich eben "undefined" zurück (ALLES in myMessageWindow.document ist dann undefined).... :(

    Vielleicht ist mein Problem jetzt besser erklärt?

    Lg und danke für deine Antworten :)
    Spite

  • Ok, ich bin ein Noobmit miner onload haut es jetzt hin :) es wird auch immer geworfen - und so kann ich es jetzt realisieren!!!

    Habe ein Problem mit einem weiteren globalen HTMLElement, welches den tbody meiner Table speichert (per .cloneNode(true)), damit ich, bei einem erneuten öffnen des Fensters eventuelle, alte TableRows auch wieder sehen kann :(

    Muß mir dafür noch was einfallen lassen, aber mein vorrangigen Problem scheint gelöst zu sein - das passiert mir immer, dass ich shcon ewig herumsuche, dann hier was frage und dann selbst draufkomme :( - sry ;)

    Lg
    Spite

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!