karwen: Browserfenster öffnen und schließen ...

Hallo zusammen,

ich habe folgendes Problem:

Ich habe zwei Javascriptfunktionen, die ich über zwei Buttons aufrufe:

Hier das Coding dazu:

  
var = report;  
function openWin() {  
report = window.open("http://www.google.de","","");  
}  

  
function closeWin() {  
report.close();  
}  

Diese Funktionen werden, wie bereits erwähnt, jeweils über einen Button aufgerufen und funktionieren einwandfrei. Wenn ich jetzt in der ersten Funktion eine weitere Funktion aufrufe (siehe unten), dann funktioniert zwar meine erste Funktion (openWin), aber die zweite (closeWin) läuft auf einen Fehler, der mir sagt: "report ist kein Objekt oder 0".

  
var = report;  
function openWin() {  
testfunktion();  
report = window.open("http://www.google.de","","");  
}  

Hat irgendjemand eine Idee für mich?

Vielen Dank,
karwen

  1. Hallo,

    var = report;

    Diese Codezeile erzeugt einen Syntaxfehler. Du meintest wohl:

    var report;

    function openWin() {
    report = window.open("http://www.google.de","","");

    Einen Fensternamen im zweiten Parameter solltest du angeben, den dritten Parameter kannst du weglassen, wenn er leer ist (ggf. überprüfen, ob das für Browser einen Unterschied macht).

    Wenn ich jetzt in der ersten Funktion eine weitere Funktion aufrufe (siehe unten), dann funktioniert zwar meine erste Funktion (openWin), aber die zweite (closeWin) läuft auf einen Fehler, der mir sagt: "report ist kein Objekt oder 0".

    Vielleicht passiert bereits ein Fehler in testfunktion. Ansonsten wird sie keinen Einfluss darauf haben können, dass mit report = window.open(…) der Variablen report ein Wert zugewiesen wird. Wenn sich das Fenster öffnet, dann sollte auch in report das Fensterobjekt des Popups gespeichert sein.

    Mathias

    1. Hallo Mathias,

      var = report;

      Diese Codezeile erzeugt einen Syntaxfehler. Du meintest wohl:

      var report;

      vollkommen richtig, mein Fehler :)

      Also, alle Funktionen laufen allein einwandfrei, auch die dritte. Ich habe nur das Problem, dass der Variablenwert der globalen Variable "report" verloren geht, wenn ich eine Funktion aufrufe.

      Allerdings, wenn es eine weitere Möglichkeit gibt, das geöffnete Fenster anzupsrechen, dann bin ich dafür offen.

      Danke und viele Grüße,
      karwen

      1. Hallo,

        Also, alle Funktionen laufen allein einwandfrei, auch die dritte. Ich habe nur das Problem, dass der Variablenwert der globalen Variable "report" verloren geht, wenn ich eine Funktion aufrufe.

        Das passiert nicht einfach so ohne Grund. Entweder der Wert wurde vorher nicht korrekt gesetzt, er ist keine globale Variable, er wird in der aufgerufenen Funktion irgendwie überschreiben oder andere Codestellen setzen eine globale report-Variable.

        Lass dir mal den Wert von report an verschiedenen Stellen ausgeben (Fehlersuche mit Kontrollausgaben, Fehlerkonsolen).

        Zeige mal bitte den vollständigen (reduzierten) Code, am besten als Online-Beispiel.

        Allerdings, wenn es eine weitere Möglichkeit gibt, das geöffnete Fenster anzupsrechen, dann bin ich dafür offen.

        Nein, das ist schon die korrekte (und einzig mögliche, es sei denn, man öffnet noch einmal ein Fenster mit demselben Namen, um es gleich wieder zu schließen).

        Mathias

        1. Hallo Mathias,

          Zeige mal bitte den vollständigen (reduzierten) Code, am besten als Online-Beispiel.

          function setButtonParameters( currentState, defaultCommandSequence ){  
              var commandSequence = new sapbi_CommandSequence();  
              var commandSET_ITEM_PARAMETERS_1 = new sapbi_Command( "SET_ITEM_PARAMETERS" );  
              var paramITEM_TYPE = new sapbi_Parameter( "ITEM_TYPE", "BUTTON_GROUP_ITEM" );commandSET_ITEM_PARAMETERS_1.addParameter( paramITEM_TYPE );  
              var paramINIT_PARAMETERS = new sapbi_Parameter( "INIT_PARAMETERS" );  
              var paramListINIT_PARAMETERS = new sapbi_ParameterList();commandSET_ITEM_PARAMETERS_1.addParameter( paramINIT_PARAMETERS );  
              var paramVISIBILITY = new sapbi_Parameter( "VISIBILITY", "HIDDEN" );  
              paramListINIT_PARAMETERS.addParameter( paramVISIBILITY );  
              paramINIT_PARAMETERS.setChildList( paramListINIT_PARAMETERS );  
              var paramTARGET_ITEM_REF = new sapbi_Parameter( "TARGET_ITEM_REF", "BUTTON_SHOW" );  
              commandSET_ITEM_PARAMETERS_1.addParameter( paramTARGET_ITEM_REF );  
              commandSequence.addCommand( commandSET_ITEM_PARAMETERS_1 );  
              var commandSET_ITEM_PARAMETERS_2 = new sapbi_Command( "SET_ITEM_PARAMETERS" );  
              var paramITEM_TYPE = new sapbi_Parameter( "ITEM_TYPE", "BUTTON_GROUP_ITEM" );commandSET_ITEM_PARAMETERS_2.addParameter( paramITEM_TYPE );  
              var paramINIT_PARAMETERS = new sapbi_Parameter( "INIT_PARAMETERS" );  
              var paramListINIT_PARAMETERS = new sapbi_ParameterList();commandSET_ITEM_PARAMETERS_2.addParameter( paramINIT_PARAMETERS );  
              var paramVISIBILITY = new sapbi_Parameter( "VISIBILITY", "VISIBLE" );  
              paramListINIT_PARAMETERS.addParameter( paramVISIBILITY );  
              paramINIT_PARAMETERS.setChildList( paramListINIT_PARAMETERS );  
              var paramTARGET_ITEM_REF = new sapbi_Parameter( "TARGET_ITEM_REF", "BUTTON_HIDE" );  
              commandSET_ITEM_PARAMETERS_2.addParameter( paramTARGET_ITEM_REF );  
              commandSequence.addCommand( commandSET_ITEM_PARAMETERS_2 );  
              return sapbi_page.sendCommand( commandSequence );  
          }  
            
          var = report;  
          function openWin() {  
          setButtonParameters();  
          report = window.open("http://www.google.de","","");  
          }  
            
          function closeWin() {  
          report.close();  
          }
          

          Das ist das Coding. Ich setze mit der ersten Funktion die Parameter VISIBLE und HIDDEN für die beiden Buttons, die open- und close-Funktion aufrufen. Bitte wundere Dich nicht, das Coding ist Teil eines SAP-Systems.

          Viele Grüße und danke,
          Karsten

          1. Mahlzeit karwen,

            also wenn ich ein Javascript-Interpreter wäre, würde ich doch schon erst einmal komisch gucken, wenn eine Funktion, die folgendermaßen definiert wurde:

            function setButtonParameters( currentState, defaultCommandSequence ){

            [...]

              
            plötzlich ohne Parameter aufgerufen wird:  
              
            
            > `setButtonParameters();`{:.language-javascript}  
              
            Gibt's dafür irgendeinen nachvollziehbaren Grund?  
              
              
            MfG,  
            EKKi  
            
            -- 
            sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
            
            1. Hallo EKKi

              also wenn ich ein Javascript-Interpreter wäre, würde ich doch schon erst einmal komisch gucken, wenn eine Funktion, die folgendermaßen definiert wurde:

              function setButtonParameters( currentState, defaultCommandSequence ){

              [...]

              
              >   
              > plötzlich ohne Parameter aufgerufen wird:  
              >   
              > > `setButtonParameters();`{:.language-javascript}  
              >   
              > Gibt's dafür irgendeinen nachvollziehbaren Grund?  
                
              Nein, Du hast natürlich recht.  
              Im richtigen Coding werden die Parameter auch mit übergeben.  
                
              Also nochmal richtig:  
                
              ~~~javascript
              function setButtonParameters( currentState, defaultCommandSequence ){  
                  var commandSequence = new sapbi_CommandSequence();  
                  var commandSET_ITEM_PARAMETERS_1 = new sapbi_Command( "SET_ITEM_PARAMETERS" );  
                  var paramITEM_TYPE = new sapbi_Parameter( "ITEM_TYPE", "BUTTON_GROUP_ITEM" );commandSET_ITEM_PARAMETERS_1.addParameter( paramITEM_TYPE );  
                  var paramINIT_PARAMETERS = new sapbi_Parameter( "INIT_PARAMETERS" );  
                  var paramListINIT_PARAMETERS = new sapbi_ParameterList();commandSET_ITEM_PARAMETERS_1.addParameter( paramINIT_PARAMETERS );  
                  var paramVISIBILITY = new sapbi_Parameter( "VISIBILITY", "HIDDEN" );  
                  paramListINIT_PARAMETERS.addParameter( paramVISIBILITY );  
                  paramINIT_PARAMETERS.setChildList( paramListINIT_PARAMETERS );  
                  var paramTARGET_ITEM_REF = new sapbi_Parameter( "TARGET_ITEM_REF", "BUTTON_SHOW" );  
                  commandSET_ITEM_PARAMETERS_1.addParameter( paramTARGET_ITEM_REF );  
                  commandSequence.addCommand( commandSET_ITEM_PARAMETERS_1 );  
                  var commandSET_ITEM_PARAMETERS_2 = new sapbi_Command( "SET_ITEM_PARAMETERS" );  
                  var paramITEM_TYPE = new sapbi_Parameter( "ITEM_TYPE", "BUTTON_GROUP_ITEM" );commandSET_ITEM_PARAMETERS_2.addParameter( paramITEM_TYPE );  
                  var paramINIT_PARAMETERS = new sapbi_Parameter( "INIT_PARAMETERS" );  
                  var paramListINIT_PARAMETERS = new sapbi_ParameterList();commandSET_ITEM_PARAMETERS_2.addParameter( paramINIT_PARAMETERS );  
                  var paramVISIBILITY = new sapbi_Parameter( "VISIBILITY", "VISIBLE" );  
                  paramListINIT_PARAMETERS.addParameter( paramVISIBILITY );  
                  paramINIT_PARAMETERS.setChildList( paramListINIT_PARAMETERS );  
                  var paramTARGET_ITEM_REF = new sapbi_Parameter( "TARGET_ITEM_REF", "BUTTON_HIDE" );  
                  commandSET_ITEM_PARAMETERS_2.addParameter( paramTARGET_ITEM_REF );  
                  commandSequence.addCommand( commandSET_ITEM_PARAMETERS_2 );  
                  return sapbi_page.sendCommand( commandSequence );  
              }  
                
              var report;  
              function openWin() {  
              setButtonParameters( currentState, defaultCommandSequence );  
              report = window.open("http://www.google.de","","");  
              }  
                
              function closeWin() {  
              report.close();  
              }
              

              Mein Problem ist vielmehr, dass closeWin nicht mehr funktioniert, sobald ich setButtonParameters mit aufrufe. Ohne die Funktion läuft es einwandfrei.

              Viele Grüße,
              karwen

              1. Hi,

                Mein Problem ist vielmehr, dass closeWin nicht mehr funktioniert, sobald ich setButtonParameters mit aufrufe. Ohne die Funktion läuft es einwandfrei.

                Dann lass uns bitte noch wissen, was Mathias’ Hinweise bzgl. Fehlersuche erbracht haben. (Berücksichtigt hast du sie doch wohl?)

                MfG ChrisB

                --
                RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
                1. Hi ChrisB,

                  Dann lass uns bitte noch wissen, was Mathias’ Hinweise bzgl. Fehlersuche erbracht haben. (Berücksichtigt hast du sie doch wohl?)

                  wie bereits erwähnt, die Fehlermeldung der Konsole ist:

                  Line: 294
                  Char: 1
                  Error: 'report' is null or not an object
                  Code: 0
                  URL: http://www.google.de

                  Viele Grüße,
                  Karsten

                  1. Hi,

                    wie bereits erwähnt, die Fehlermeldung der Konsole ist:

                    Das ist der eine Teil, fein. Und der andere?

                    MfG ChrisB

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

                      wie bereits erwähnt, die Fehlermeldung der Konsole ist:

                      Das ist der eine Teil, fein. Und der andere?

                      MfG ChrisB

                      Hi ChrisB,

                      was muss ich da genau machen?
                      Meine Javascriptkenntnisse sind eher rudimentär :/

                      Bevor Du den Link von Matthias zu den Kontrollausgaben postest: Ich hab mir den Teil durchgelesen, nur erschließt sich mir daraus nicht, was das bringen soll und vor allem, wie ich das in mein Coding einbetten muss ...

                      Sorry für meine Unwissenheit ...

          2. Hallo,

            var = report;

            dass das falsch ist, hatten wir doch schon ganz am Anfang festgestellt.

            Ciao,
             Martin

            --
            Wieso heißen die Dinger eigentlich Anrufbeantworter? Eigentlich sind es doch nur Anrufanhörer.
            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(