Bolli: Fehlermeldung Javascriptobjekt ist Null

Hallo,

da ich bei meinem ersten Thread keine Antwort bekommen habe, wende ich mich erneut an alle Experten auf das sie mir helfen mögen.
Es wäre auch schon hilfreich, wenn mir jemand sagen würde "Das,was Du da vorhast geht nicht, weil ...", aber mein Problem ist so elementar, daß ich mir kaum vorstellen kann, daß es hier keine Lösung bzw. Workaround gibt.

Ich öffne mit "window.open()" ein neues Browserfenster und scrolle dann mit "neuesFenster.document.all.Absatz.scrollIntoView("true")" zu einem Absatz.
Wenn ich dies mit zwei Html-Dateien mache, funktioniert das auch tadellos.
Nun ist es aber in meiner Anwendung so, daß ich eine XML-Datei mithilfe von XSL-Stylesheets anzeige.
Wenn ich im <body> der XSL-Sourcen einen Button definiere, der ein "scrollIntoView" in einer Javascriptfunktion auslöst, funktioniert es auch.
Wenn ich nun im Grunde genau das gleiche im aufrufenden Fenster/XSL-Stylesheet über "neuesFenster.document.all.Absatz.scrollIntoView("true") auslösen möchte, bekomme ich die Fehlermeldung: neuesFenster.document.all.Absatz ist Null oder kein Objekt.

Hingegen ist neuesFenster.focus kein Problem. Ich stelle also fest, daß grundsätzlich das Ansprechen eines Objektes (hier window) in einer Javascriptfunktion innerhalb eines XSL-Stylesheets funktioniert und das auch document.all in einem Javascript innerhalb eines XSL-Stylesheets bekannt ist und funktioniert.
Warum gibt es dann bei window.document.all einen Fehler?

Mir ist bekannt, daß JavaScript-Objekte bei einer Einbindung mit xsl:script nicht verwendet werden können. Deshalb habe ich es auch mit den normalen HTML-Tags eingebunden (s.u.).

Weiß jemand Rat?

Ansonsten hat vielleicht jemand eine Idee, wie ich auf andere Art in dem neu geöffneten Fenster scrollen kann, wenn die Information wohin gescrollt werden soll, aus dem aufrufenden Fenster stammt?

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl" encoding="ISO-8859-1">
<xsl:template match="/"><STYLE><![CDATA[ .design { font-size:10pt; font-family:Arial; font-weight:bold; max-width:100%; } ]]>  </STYLE>

<html>
<head>

<script language="JavaScript">

var neuesFenster;

function weitereDaten(){
 neuesFenster = window.open("","WD","width=500,height=300,menubar=no,locationbar=no,resizable=yes,scrollbars=yes");
 neuesFenster.location.href = "DATEN.XML";
 neuesFenster.focus();
 neuesFenster.document.all.Absatz.scrollIntoView("true");
}

  1. hallo ebenfalls,

    da ich bei meinem ersten Thread keine Antwort bekommen habe,

    hättest du abwarten sollen, bis jemand dir antworten kann oder mag. Deine Fragestellung ist nicht ganz so leicht mit einem Verweis zu beantworten, man muß ein kleines bißchen überlegen. Dein Thread ist https://forum.selfhtml.org/?t=89667&m=536436. Erst wenn dieser Thread im Archiv verschwunden ist, ist es zulässig, das Thema in einem neuen Thread nochmals anzusprechen.

    Und jetzt bitte keine Debatte "das liest doch niemand mehr" anfangen. Darüber, daß dir _das_ erst recht keine oder nur ein paar barsche Reaktionen einbringt, kannst du dich im Archiv informieren.

    Grüße aus Berlin

    Christoph S.

  2. Hallo,

    also erstmal schön, daß Du Dich mit XML beschäftigst, wo man mit dem DOM arbeiten kann...

    Wenn ich dies mit zwei Html-Dateien mache, funktioniert das auch tadellos.
    Nun ist es aber in meiner Anwendung so, daß ich eine XML-Datei mithilfe von XSL-Stylesheets anzeige.
    Wenn ich im <body> der XSL-Sourcen einen Button definiere, der ein "scrollIntoView" in einer Javascriptfunktion auslöst, funktioniert es auch.
    Wenn ich nun im Grunde genau das gleiche im aufrufenden Fenster/XSL-Stylesheet über "neuesFenster.document.all.Absatz.scrollIntoView("true") auslösen möchte, bekomme ich die Fehlermeldung: neuesFenster.document.all.Absatz ist Null oder kein Objekt.

    Hingegen ist neuesFenster.focus kein Problem. Ich stelle also fest, daß grundsätzlich das Ansprechen eines Objektes (hier window) in einer Javascriptfunktion innerhalb eines XSL-Stylesheets funktioniert und das auch document.all in einem Javascript innerhalb eines XSL-Stylesheets bekannt ist und funktioniert.
    Warum gibt es dann bei window.document.all einen Fehler?

    Oben schreibst Du es ginge document.all, hier schlußfolgerst Du window.document.all ginge nicht. Ich halte diese Annahme für zu weitgehend. Das Element mit ID Absatz ist nicht da. Es ist noch nicht da ;)

    Der Browser muß das Dokument erst noch laden, wärend Du in der Funktion weitereDaten() schon auf Elemente zugreifen willst. Da hege ich den Verdacht, drückt der Schuh.
    Versuche es doch mal so: Im Dokument des neuen Fensters notierst Du für den body (oder dessen Trasformation) onload="opener.mein_scroll()" und Dokument opener notierst Du nur noch eine Funktion function mein_scroll(){neuesFenster.document.all.Absatz.scrollIntoView("true");}

    Gruß aus Berlin!
    eddi

    --
    at, wie er leibt und lebt auf ein Posting
    > > Nein, ich denke nicht.
    gepromptet
    > Das empfiehlt sich aber.
    :))))
    1. Hallo eddi,

      erstmal vielen Dank für Deine Antwort. Dann bin ich ja doch nicht der einzige, der sich mit XML beschäftigt :-)

      Leider hat sich Dein Verdacht, daß der Schuh beim Timing drückt nicht bestätigt. Wie gesagt klappt das ganze ja, wenn ich es mit zwei Html-Dateien machen. Hier taucht das Problem, daß ich den Absatz anspreche bevor er existiert, nicht auf.
      Zusätzlich habe ich aber nocheinmal die Probe aufs Exempel gemacht und das scrollIntoView aus der Funktion rausgenommen und in eine zweite Funktion mit eigenem Button gepackt.
      Dann habe ich das Fenster geöffnet und einen laaaaaaaaaangsamen (ups, jetzt habe ich wohl nur noch 4 Punkte) Schluck aus meiner Kaffeetasse genommen. Das Dokument war somit geladen und der Absatz da. Dann erst habe per Button neuesFenster.document.all.Absatz.scrollIntoView("true"); ausgelöst und siehe da: es ging nicht, alte Fehlermeldung.

      Deshalb wird das vorgeschlagene Workaround auch nicht funktionieren. Darüberhinaus will ich variabel scrollen und die Information, wohin gescrollt werden soll, liegt ja im öffnenden Fenster.
      Trotzdem hat mich Deine Antwort zu einer Lösung gebracht. Das einzige, was nämlich als Verbindung funktioniert ist „opener“.
      Ich setze im opener Fenster eine Variable, und rufe im onLoad-Ereignis des aufgerufenen Fensters eine Funktion auf, die entsprechend des Inhalts opener.variable zu den verschiedenen Absätzen scrollt.

      Grüße aus Neuss, Bolli

      1. Guten Morgen,

        Neues Spiel, neues Glück:

        also erstmal schön, daß Du Dich mit XML beschäftigst, wo man mit dem DOM arbeiten kann...

        versuche es bitte mal über DOM-Funktionen:

        document.getElementById('Absatz') statt document.all

        Anderfalls sei mal bitte so lieb und poste alle hier (XML, SXLT, und was sonst noch)

        Gruß aus Berlin!
        eddi

        --
        at, wie er leibt und lebt auf ein Posting
        > > Nein, ich denke nicht.
        gepromptet
        > Das empfiehlt sich aber.
        :))))