fux: IE-Problem window.open() ... win.document.title

Hallo,

habe ein Problem mit IE (oder er mit sich selbst):

function openFileDownloadWindow(frontControllerUrl, fileUrl, fileNameDownload) {
    var win = window.open(frontControllerUrl + '&FileUrl=' + fileUrl + '&FileNameDownload=' + fileNameDownload, 'File', 'width=570,height=713,resizable=yes,dependent=no,scrollbars=yes,location=no,status=yes,menubar=no,toolbar=no,directories=no');
    win.document.title = "Datei laden ...";
}

Bei "win.document.title" meldet er einen Fehler ohne genauere Angaben zu machen was ihn stört. Firefox kommt klar damit.
Laut Selfhtml kann auch der IE schreibend auf den title zugreifen.

Ich kann mich erinnern, dass dies erst nach Zeitverzögerung geht.
Wenn ich vor das win.document.title-Statement ein alert einfüge, klappt's auch fehlerlos.
Mit setTimeout hab ich das Problem, dass er die dann bei Ausführung die Variable win nicht kennt (da nach der Zeit ja schon der Scope der Function verlassen wurde).

Wie lös ich das Problemchen?

Danke!
Gruß, Robert

  1. Hallo, Robert!

    Du kannst setTimeout den Inhalt von "win" innerhalb einer Closure mitgeben:

      
    window.setTimeout(function(win) { return function() { win.document.title="Datei laden ..."; } }(win), 45);
    

    Gruß, LX

    --
    RFC 1925, Satz 2: Egal, wie fest man schiebt, ganz gleich, wie hoch die Priorität ist, man kann die Lichtgeschwindigkeit nicht erhöhen.
    1. Du kannst setTimeout den Inhalt von "win" innerhalb einer Closure mitgeben:

      window.setTimeout(function(win) { return function() { win.document.title="Datei laden ..."; } }(win), 45);

        
      Wenn das die Lösung des Problems ist, reicht aber auch  
        
      `window.setTimeout(function() { win.document.title="Datei laden ..."; }, 45);`{:.language-javascript}  
        
      Da in dem closure das win nicht verloren geht.  
        
      Struppi.
      
      1. Stimmt. Solange man bei setTimeout win nicht innerhalb eines Strings übergibt (durch den via implizitem eval() ein neuer Scope geschaffen wird, sollte man keine Probleme haben.

        Gruß, LX

        --
        RFC 1925, Satz 2: Egal, wie fest man schiebt, ganz gleich, wie hoch die Priorität ist, man kann die Lichtgeschwindigkeit nicht erhöhen.
      2. Bei beiden Varianten bleibt die Fehlermeldung "unbekannter Fehler". Im IE8-Debugger ist die gleiche Stelle: "win.document.title" markiert.

        Weitere Info: IE8 im Standardmodus, DocType html4/strict

        Noch 'ne Idee?

        1. Bei beiden Varianten bleibt die Fehlermeldung "unbekannter Fehler". Im IE8-Debugger ist die gleiche Stelle: "win.document.title" markiert.

          Darfst du überhaupt auf das Dokument zugreifen? Oder verhindert das die SOP?

          Struppi.

          1. Für die weniger Abkürzungsgeübten unter den Forenlesern: Struppi meint die Same Origin Policy, eine Sicherheitsrichtlinie, nach dem Seiten von unterschiedlichen Hosts nicht untereinander auf das DOM zugreifen dürfen.

            Gruß, LX

            --
            RFC 1925, Satz 2: Egal, wie fest man schiebt, ganz gleich, wie hoch die Priorität ist, man kann die Lichtgeschwindigkeit nicht erhöhen.
          2. Darfst du überhaupt auf das Dokument zugreifen? Oder verhindert das die SOP?

            Kein Rechteproblem, selber Host.
            Da würde Firefox als erster schreien wenn's um Rechte geht.

            Vielleicht liegt es daran, dass mit der Fenster-URL ein PDF geladen wird, also ein Stream mit content-type application/pdf; also das Fenster bekommt keinen HTML-Inhalt und der IE kann deswegen keinen Title zuweisen???

            1. Vielleicht liegt es daran, dass mit der Fenster-URL ein PDF geladen wird, also ein Stream mit content-type application/pdf; also das Fenster bekommt keinen HTML-Inhalt und der IE kann deswegen keinen Title zuweisen???

              Das ist durchaus wahrscheinlich. Es liegt in dem Fall ja kein window.document vor auf das zugegriffen werden kann. du kannst ja mal Testhalber alert(window.document) ausgeben.

              Struppi.

              1. Vielleicht liegt es daran, dass mit der Fenster-URL ein PDF geladen wird, also ein Stream mit content-type application/pdf; also das Fenster bekommt keinen HTML-Inhalt und der IE kann deswegen keinen Title zuweisen???

                Das ist durchaus wahrscheinlich. Es liegt in dem Fall ja kein window.document vor auf das zugegriffen werden kann. du kannst ja mal Testhalber alert(window.document) ausgeben.

                Struppi.

                Hallo Struppi,
                alert(win.document) liefert (wie auch Firefox) [object HTMLDocument].

                Schwer zu sagen ob wir auf der richtigen Fährte sind. Kurz nach window.open ist document "natürlich" vorhanden.
                Ob das dann nach Beginn des Ladens des PDF-Streams wieder weggezogen wird???

                1. Hi,

                  Schwer zu sagen ob wir auf der richtigen Fährte sind. Kurz nach window.open ist document "natürlich" vorhanden.
                  Ob das dann nach Beginn des Ladens des PDF-Streams wieder weggezogen wird???

                  Immerhin übernimmt dann das PDF-Plugin die Kontrolle - gut möglich, dass du dann auf document keinen Zugriff mehr hast, bzw. document gar nicht mehr verfügbar ist.

                  Als Workaround könntest du probieren, erst mal ein leeres Dokument zu öffnen (about:blank), dann den title zu setzen - und anschließend per location.href auf das PDF „umzuleiten“.

                  MfG ChrisB

                  --
                  RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
                  1. Gute Idee!

                    Hab das jetzt so:

                    var win = window.open('', 'File', 'width=570,...);  
                    win.document.title = "Datei laden";  
                    win.location.href = frontControllerUrl + '&FileUrl=' + fileUrl + '&FileNameDownload=' + fileNameDownload;
                    

                    Der Title kann jetzt auch im IE zugewiesen werden.
                    Jedoch bleibt da noch ein Problemchen:
                    Das Fenster bleibt leer stehen, nachdem Speichern oder Öffnen (=> im externen PDF-Reader) gewählt wurde.
                    Wie kriege ich mit wann/ob ich das Fenster mittels JS zumachen kann?
                    Wenn der Browser so eingestellt ist, dass er die Datei (PDF und andere) in der Webseite anzeigt, darf ich's nicht zumachen.
                    Ich schätze, ich bekomme in JS nicht genügend Info um das handlen zu können.

                    1. Das Fenster bleibt leer stehen, nachdem Speichern oder Öffnen (=> im externen PDF-Reader) gewählt wurde.

                      Ich meine: das passierte nicht wenn ich bei window.open() die URL angebe.
                      Dann macht der Browser selbst das Fenster wieder zu.