romero: activexobject( wscript.shell ) - Problem?

Hallöchen an euch da draußen,

nun stehe ich wieder vor einem Problem und weiß nicht weiter. Ich hoffe Ihr könnt mir dabei helfen.

Es geht um folgenden Sachverhalt:

Ich habe ein Script in eine *.HTA-Datei gepackt. In diesem Script benutze ich, wie hier unter SELFHTML erläuterte, diese LinkedSelection. Ich habe diese natürlich für meine Auswahlliste abgeändert.

Das Ganze sieht ja (abgespeckt) wie folgt aus:

<script type="text/javascript" src="Bereichsauswahl.js"></script>  
<script type="text/javascript" src="LinkedSelection.js"></script>  
<script type="text/javascript" src="LinkedSelectionNeu.js"></script>  
  
function init()  
{  
 function ergebniszeigen( selected )  
 {  
  ...  
 }  
  
 auswahl1()  
  
 function auswahl1  
 {  
  var ausgabe = LinkedSelectionAusgabe( [ Bereich1, Bereich2, Bereich3 ], ergebniszeigen, Bereichsauswahl_Variable )  
 }  
}

So im Großen die Sache von SELFHTML.

Nun lese ich mittels new activexobject( "wscript.shell" ) und ENVIRONMENT( "Process" ) und dann TEMP den Pfad für TEMP für jeden Nutzers aus.

Sieht wie folgt aus:

var teil1 = new activxobject( "wscript.shell" )  
var teil2 = teil1.environment( "process" )  
var pfad_benutzer = teils2( "TEMP" )  
  
// und dann wandle ich mit replace die backslashes um, damit ich direkten zugang zu den ordnern habe

Dieser pfad_benutzer nehme ich mit in alle weiteren Teil-Scripte, wo ich Zugang zu dem Temp-Ordner des Benutzer brauche.

Bis hier her alles bestens, seitens meines Scriptes, FÜR IE6!!!
Bei IE8 zeigt er mit das mit dem Automatisierungs-Sache an, aber dazu später mehr.

Nun rufe ich ein Teilscript auf und verwende diese "LinkedSelection" erneut an, aber anders als oben:

function init_neu()  
{  
 s = document.createElement( "script" )  
 s.type = "text/javascript"  
 s.src = pfad_benutzer + "/matte_datei.js"  
  
 // und dann wird dieses "s" im head-Bereich mittels appendChild(s) hinzugefügt  
  
function ergebniszeigenneu( selected )  
 {  
  ...  
 }  
  
auswahl2()  
  
 functions auswahl2()  
 {  
  var ausgabe_neu = LinkedSelectionAusgabeNeu( [ BereichNeu1, BereichNeu2 ], ergebniszeigenneu, mattenauswahl )  
 }  
}

Die matte_datei.js wird mittels opentextfile( pfad_benutzer + "/matte_datei.js, 2, true ) & write() erstellt und enthält eine var matteauswahl, welche für das neue LinkedSelection (LS) benutzt wird.

Also fast analog zu dem LS oben bzw. das von SELFHTML, nur auf meine Bedürfnisse angepasst.

Nun zu meinem Problem: ich benutze den IE6 (die *.HTA-Datei habe ich in den Kombatibilitätsmodus IE7 versetzt, für höhere IE's), eine andere Nutzerin den IE8.

Bei dem IE8 kommt nun, wenn also die function auswahl2() aufgerufen wird, die Fehlermeldung das "ungültige Zeichen" vorhanden sind bei file:\\C:\Document..."Benutzer"\Local Setting\Temp\matte_datei.js und weiterhin das die Variable mattenauswahl undefiniert ist.

Und so wie ich das mit bekommen haben, scheint es bis vor einigen Wochen mit dem IE8 funktioniert zu haben. Aber seit einigen Tagen liefen einige Updates über das System und seit dem funktioniert diese Sache nicht mehr (die erste LinkedSelection funktioniert aber einwandtfrei).

Er gibt mir aber als pfad_benutzer den richtigen Pfad aus, und es wird darin auch die korrekte Datei erstellt, aber er bekommt irgendwie kein Zugriff auf diese Datei bzw. auf die Variable.

Zumal auch der IE8 über die Entwicklertools bei dem "wscript.shell" ein Automatisierungsserver kann Objekt nicht erstellen anzeigt.

Als Test waren alle Sicherheitsstufen auf sehr niedrig gestellt.

Woran liegt es denn nun? Wurde das createElement("script") nicht richtig eingefügt? Oder liegt es wieder an diesem sch... IE8? Oder an den kürzlich hinzugekommenen Updates (keine Ahnung genau was da kam).

LG Romero

  1. Brauche hier dringend Eure Hilfe.

    hier mal die Scriptauszüge:

    <head>	  
    	<title>Stuecklistenscript</title>  
    	  
    	<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7">  
    	<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">  
      
    ...
    

    ... hier wird die globale Variable Pfad_Temp_Benutzer definiert:
    (hier bringt er mir, bei var WshShell = new ActiveXObject("WScript.Shell"), dass er da kein Automatisierungserver auf das Objekt erstellen kann)

      
    			//--> C:\Documents and Settings\User\Local Settings\Temp  
    			//--> Pfad_Temp_Benutzer -> Ersetzbar für C:\Temp  
    			  
    			var WshShell = new ActiveXObject("WScript.Shell");  
    			var WshSysEnv = WshShell.Environment("Process");			  
    			Pfad_Temp_Benutzer = WshSysEnv("TEMP").replace( /\\/g, "/" );
    

    ... dann wird folgende init-Funktion aufgerufen (aus dem Hauptscript):

    init_Zusatzmatten_SA_LR()

    ... und diese sieht dann (verkürzt) wie folgt aus:

    		function init_Zusatzmatten_SA_LR()  
    		{  
    			...  
      
    			AuswahlForZusatz_SA_LR( out_zusatz_SA_LR, list_zusatz_SA_LR );  
      
    			//----------------------------------------//  
    			//-- Einfügen des neuen Script-Elements --//  
    			//----------------------------------------//  
      
    			s = document.createElement( "script" );  
    			s.setAttribute( "type", "text/javscript" );  
    			s.setAttribute( "src", Pfad_Temp_Benutzer + "/Zusatzmattenauswahl_SA_LR.js" );  
    			  
    			document.getElementsByTagName( 'head' )[0].appendChild(s);  
      
    			//----------------------------------------------//  
    			//-- Auswahlliste für die Zusatzmatten starten--//  
    			//----------------------------------------------//  
      
    			Auswahl2();  
      
    			...  
    		};  
      
    	//--------------------------//  
    	//-- Zusatzmatten-Auswahl --//  
    	//--------------------------//  
      
    		function ergebnisZeigenZusatz_SA_LR( selected )  
    		{  
    			if( selected.length )  
    			{  
      
    				var sel = '';  
    				var val = '';  
    				var txt = '';  
    				for( var i = 0; i < selected.length; i++ )  
    				{  
    					sel += ( i>0 ? ' &rarr; ' : '') + selected[i].id;  
    					val += ( i>0 ? ' &rarr; ' : '') + selected[i].value;  
    					txt += ( i>0 ? ' &rarr; ' : '') + selected[i].text;  
    				};  
    			};  
      
    		};  
      
    	//-------------------------------------------------------------------------------------------------------------//  
    	//-- Datei erstellen, wo alle Zusatzmatten enthalten sind (zum Einlesen für die LinkedSelectionZusatz_SA_LR) --//  
    	//-------------------------------------------------------------------------------------------------------------//  
      
    		function AuswahlForZusatz_SA_LR( out, variante )  
    		{  
    			...  
    			//-----------------------------------------------------------------------------//  
    			//-- leere Datei öffnen und mit der gesamten Liste der Zusatzmatten befüllen --//  
    			//-----------------------------------------------------------------------------//  
      
    			var fso = new ActiveXObject("Scripting.Filesystemobject");  
      
    			file = fso.OpenTextFile(Pfad_Temp_Benutzer + "/Zusatzmattenauswahl_SA_LR.js", 2, true);  
    			file.write( "var Zusatzmatten_SA_LR = { 'Zusatz_SA_LR' : { " + Zusatz_HTZ_SA_LR + "}, 'ZusatzVariante_SA_LR' : { " + Zusatz_Varianten_SA_LR + "} };" );  
    			file.close();  
      
    			return;  
    		};  
      
    	//----------------------------------------------------------------------//  
    	//-- LinkedSelectionZusatz_SA_LR entsprechend definieren und ausgeben --//  
    	//----------------------------------------------------------------------//  
      
    		function Auswahl2()  
    		{  
    			var vkZusatz_SA_LR = new LinkedSelectionZusatz_SA_LR( [ 'Zusatz_SA_LR', 'ZusatzVariante_SA_LR' ], ergebnisZeigenZusatz_SA_LR, Zusatzmatten_SA_LR );  
    		};
    

    Ich vermute mal, dass es an dem Teil des document.getElementsByTagName( "head" )[0].appendChild() liegt.

    Ich habe schon mittels s.setAttribute( "type", "text/javascript" );, um den Typen des neuen Script-Elementes zu bestimmen auf "text/javscript" bzw. application/javascript zu ändern. Aber dabei kam eine erneute Fehlermeldung, dass die Variable (für die function Auswahl2()) Zusatzmatten_SA_LR nicht definiert ist. Auch das mit dem vorherigem Einlesen der Datei Zusatzmattenauswahl_SA_LR.js geht es nicht (also das Umgehen des Einfügen des Script-Elementes).

    Lass ich alles beim Alten (siehe wie oben), kommt da die Fehlermeldung das bei "ihrem" Temp-Pfad file:///C:/DOCUME~1/BENUTZERNA~1/LOCALS~1/Temp/Datei.js ungültiges Zeichen ist (Zeile:1 / Zeichen:1)

    Der Ordner für Ihren Benutzername ist aber alles mit Kleinbuchstaben geschrieben.

    Gebe ich aber die Variable Pfad_Temp_Benutzer aus, bringt er C:/DOCUME~1/benutzername/LOCALS~1/...
    Die Datei erstellen macht er ja, aber er bekommt darauf irgendwie kein Zugriff mit dem IE8.

    Woran liegt es nun? An den zuletzt durchgeführten Updates? Weiß aber nicht genau was für Updates das waren.

    LG Romero

    1. Vermute auch, dass es an den Updates selber liegen.
      Den ActiveX-Einstellungen sind wie gesagt alle (für die Tests) auf niedrig eingestellt. Also so das ActivX aktiviert ist.

      Kann es daran liegen, dass der ServicePack3 fehlt? Also bei meinem IE6 ist ein SP3 drauf (gesehen an der Info zu dem IE hinter der Version) aber bei dem IE8 ist keins.

      Und wenn ja, wie kann man das dann so programmtechnisch lösen, dass es dann für andere SP's genauso gilt?

      Und, ich glaube diese Frage ist hat jeder von euch schon mal gehört, warum wird jedes neue IE umgemodelt, dass man es immer wieder anpassen muss. Und weiß jemand welches IE das bisher sicherste war, also dasjenige wo man am wenigsten nachrüsten müsste.

      LG Romero

      1. Hallöchen an Euch,

        kann mir niemand dabei helfen?
        Hab schon unendlich viele Themen durchgelesen und probiert, aber es tritt immer der selbe Fehler auf.

        Mittels der Fehlerkonsole des IE8 kommt hier de Fehler, dass er kein Automatisierungserver zu diesem Objekt erstellen kann:

        			var WshShell = new ActiveXObject("WScript.Shell");  
        			var WshSysEnv = WshShell.Environment("Process");			  
        			Pfad_Temp_Benutzer = WshSysEnv("TEMP").replace( /\\/g, "/" );
        

        Ich habe schon die Sicherheitsstufen für lokales Intranet auf sehr niedrig bzw. diese als vertauenswürdige Seite hinzugefügt. Dabei alles was mit ActiveX zutun hat, aktiviert. Aber es passiert da nix. Der Kombatibilätsmodus ist auf IE7 eingestellt.

        Woran liegt es nun, dass er da kein Objekt erstellen kann? Ich habe schon gegooglet, aber es wird mir da immer wieder dieselbe Art und Weise der Anwendung gezeigt.

        Wenn es an einem Update des Systemes lag (was vor einiger Zeit der Fall war), welches Update bewirkt also, dass sowas passiert? Bzw. wie kann man solche Sachen umgehen?

        Brauche dringend Eure Hilfe. Weiß bald nicht mehr weiter.

        LG Romero

        PS: Mag sein das ich solch ein ähnliches Thema bereits angesprochen hab, aber auch diese hab ich durchgelesen und dementsprechend ausprobiert, aber bisher war nix erfolgreich...

        1. Hallo romero,

          Mittels der Fehlerkonsole des IE8 kommt hier de Fehler, dass er kein Automatisierungserver zu diesem Objekt erstellen kann:

          		var WshShell = new ActiveXObject("WScript.Shell");  
          
            	var WshSysEnv = WshShell.Environment("Process");			  
            	Pfad_Temp_Benutzer = WshSysEnv("TEMP").replace( /\\/g, "/" );
          
            
          kommt der Fehler in jeder Zeile? Hast du das ".replace(...) schon mal weggelassen?  
            
          Gruß, Jürgen  
          
          
          1. Hallo JürgenB,

            Hallo romero,

            Mittels der Fehlerkonsole des IE8 kommt hier de Fehler, dass er kein Automatisierungserver zu diesem Objekt erstellen kann:

            		var WshShell = new ActiveXObject("WScript.Shell");  
            
              	var WshSysEnv = WshShell.Environment("Process");			  
              	Pfad_Temp_Benutzer = WshSysEnv("TEMP").replace( /\\/g, "/" );
            
            
            >   
            > kommt der Fehler in jeder Zeile? Hast du das .replace(...) schon mal weggelassen?  
            >   
            > Gruß, Jürgen  
            >   
            
            Gruß, Jürgen  
            
            
            1. Hallo,

              Ups, einmal zu viel geklickt. Sorry

              Gruß, Jürgen

            2. Folgende Tests habe ich bisher durchgeführt:

              Test 1:
              Normaler Aufruf:

              Fehlermeldung: Ungültiges Zeichen bei dem Pfad file:///C:/Docume~1/"Benutzer"/Locals~1/Temp/Zusatzmattenauswahl_SA_LR.js

              			s = document.createElement( "script" );  
              			s.setAttribute( "type", "text/javascript" );  
              			s.setAttribute( "src", Pfad_Temp_Benutzer + "/Zusatzmattenauswahl_SA_LR.js" );  
              			  
              			document.getElementsByTagName( 'head' )[0].appendChild(s);
              

              Fehlermeldung: Zusatzmatten_SA_LR undefiniert

              		function Auswahl2()  
              		{  
              			var vkZusatz_SA_LR = new LinkedSelectionZusatz_SA_LR( [ 'Zusatz_SA_LR', 'ZusatzVariante_SA_LR' ], ergebnisZeigenZusatz_SA_LR, Zusatzmatten_SA_LR );  
              		};
              

              Test 2:
              Debugger benutzt von IE8:

              Fehlermeldung: Automat.server kann Objekt nicht erstellen

              			var WshShell = new ActiveXObject("WScript.Shell");  
              			var WshSysEnv = WshShell.Environment("Process");			  
              			Pfad_Temp_Benutzer = WshSysEnv("TEMP").replace( /\\/g, "/" );
              

              Test 3:
              Im Hauptscript Benutzerbezogenen Pfad per Hand eingegeben:

              Fehlermeldung: Zusatzmatten_SA_LR undefiniert

              		function Auswahl2()  
              		{  
              			var vkZusatz_SA_LR = new LinkedSelectionZusatz_SA_LR( [ 'Zusatz_SA_LR', 'ZusatzVariante_SA_LR' ], ergebnisZeigenZusatz_SA_LR, Zusatzmatten_SA_LR );  
              		};
              

              Test 4:
              Von HTA auf HTML + Kommentierung diverser ActiveXObjekte

              Fehlermeldung: (weitere) Automat.server kann Objekt nicht erstellen

              z.B.:
              ExcelApp = new ActiveXObject("Excel.Application");

              Weitere Tests waren das Auslesen der SCR's im Head-Bereich, da sah ich, dass die richtige Datei eingelesen wurde bzw. angehangen wurde. Oder der Pfad für den Temporären Ordner jeden Nutzers auch korrekt ausgegeben wurde (Datei wurde ebenfalls korrekt erstellt).
              Sicherheitsstufen alle auf niedrigste Stufe und ActiveXObjekte aktiviert.

              lG Romero

              1. Hallo,

                Fehlermeldung: Ungültiges Zeichen bei dem Pfad file:///C:/Docume~1/"Benutzer"/Locals~1/Temp/Zusatzmattenauswahl_SA_LR.js

                bei _dem_ Pfad würde ich mich auch beschweren, wenn ich Windows wäre. Anführungszeichen mittendrin sind jedenfalls nicht zulässig. Da ist ganz offensichtlich schon beim Zusammenbauen des Pfades was schiefgegangen.

                Ciao,
                 Martin

                --
                Wer morgens zerknittert aufsteht, hat den ganzen Tag Gelegenheit, sich zu entfalten.
                Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                1. bei _dem_ Pfad würde ich mich auch beschweren, wenn ich Windows wäre. Anführungszeichen mittendrin sind jedenfalls nicht zulässig. Da ist ganz offensichtlich schon beim Zusammenbauen des Pfades was schiefgegangen.

                  Das war nur geschrieben, da ich mehrere Benutzer habe, welches dieses Script nutzen. Für "Benutzer" kannst du z.B. Mueller oder Lehmann oder sonst was eintragen. Dieser Pfad gibt den Ordner Temp eines jeden Nutzers wieder.

                  Nachtrag:

                  Habe mittels try() und catch() nun versucht, dieses activeXobject zu erstellen. Laut IE8 und einem alert() für try() und catch(), gab er nur das alert für try() aus. Also anscheinend keine Probleme.

                  Das Hauptproblem mit dem ungültigem Zeichen und der undefinierten Variable bleibt aber.

                  LG Romero

                  1. Hi,

                    bei _dem_ Pfad würde ich mich auch beschweren, wenn ich Windows wäre. Anführungszeichen mittendrin sind jedenfalls nicht zulässig. Da ist ganz offensichtlich schon beim Zusammenbauen des Pfades was schiefgegangen.
                    Das war nur geschrieben, da ich mehrere Benutzer habe, welches dieses Script nutzen. Für "Benutzer" kannst du z.B. Mueller oder Lehmann oder sonst was eintragen. Dieser Pfad gibt den Ordner Temp eines jeden Nutzers wieder.

                    *rolleyes* hrrrmpf!
                    Dann leg doch bitte nicht zusätzliche Fallstricke für die Leute aus, die dir helfen wollen!!

                    Du kannst nicht Variableninhalte, die für die Fehlerursache möglicherweise entscheidend sind, einfach so verfremden, ohne das wenigstens zu erklären. Besser wäre in jedem Fall, den echten, unverfälschten Wert wiederzugeben.

                    Ciao,
                     Martin

                    --
                    Zwei Stammtischbrüder:
                    Hier steht, dass laut Statistik über 60 Prozent aller Ehefrauen fremdgehen.
                    Was soll ich mit dieser Information? Ich brauche Namen, Fotos, Telefonnummern ... !
                    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                    1. *rolleyes* hrrrmpf!
                      Dann leg doch bitte nicht zusätzliche Fallstricke für die Leute aus, die dir helfen wollen!!

                      Du kannst nicht Variableninhalte, die für die Fehlerursache möglicherweise entscheidend sind, einfach so verfremden, ohne das wenigstens zu erklären. Besser wäre in jedem Fall, den echten, unverfälschten Wert wiederzugeben.

                      Tu ich ja direkt indem ich mir diesen Pfad jedes einzelnen Benutzers ausgeben möchte bzw. ausgebe, mittels diesem ActiveXobject( "Wscript.Shell" ) und dann über environment("process") usw.

                      Wie gesagt, der ganze Pfad ist indirekt ne Variable. Er bekommt beim Erstellen einer neuer *.JS-Datei ja zugriff auf diesen Ordner, denn sonst würde er ja keine Datei erstellen. Aber dann beim neuen hinzufügen eines SRC-Pfades für ein neues Script-Element scheint er Probleme zu bekommen.

                      Denn wenn ich, wie oben beschrieben, diese Verkettete Auswahlliste (siehe SelfHTML) nutzen möchte und die Variable Zusatzmatten_SA_LR, welche ich mittels OpenTextFile( Benutzer_Pfad + "/test.js" ) und Write( var Zusatzmatte_SA_LR = "{ ... }" ) erstelle, scheint er beim ausführen der LinkedSelection() Probleme zu bekommen:

                      		function init_Zusatzmatten_SA_LR()  
                      		{  
                        
                      			AuswahlForZusatz_SA_LR( out_zusatz_SA_LR, list_zusatz_SA_LR );  
                        
                      			s = document.createElement( "script" );  
                      			s.setAttribute( "type", "text/javascript" );  
                      			s.setAttribute( "src", Pfad_Temp_Benutzer + "/Zusatzmattenauswahl_SA_LR.js" );  
                      			  
                      			document.getElementsByTagName( 'head' )[0].appendChild(s);  
                        
                      			Auswahl2();	  
                        
                      		};
                      
                      		function ergebnisZeigenZusatz_SA_LR( selected )  
                      		{  
                      			if( selected.length )  
                      			{  
                        
                      				var sel = '';  
                      				var val = '';  
                      				var txt = '';  
                      				for( var i = 0; i < selected.length; i++ )  
                      				{  
                      					sel += ( i>0 ? ' &rarr; ' : '') + selected[i].id;  
                      					val += ( i>0 ? ' &rarr; ' : '') + selected[i].value;  
                      					txt += ( i>0 ? ' &rarr; ' : '') + selected[i].text;  
                      				};  
                      			};  
                        
                      		};
                      
                      		function AuswahlForZusatz_SA_LR( out, variante )  
                      		{  
                      			...  
                      			var fso = new ActiveXObject("Scripting.Filesystemobject");  
                        
                      			file = fso.OpenTextFile(Pfad_Temp_Benutzer + "/Zusatzmattenauswahl_SA_LR.js", 2, true);  
                      			file.write( "var Zusatzmatten_SA_LR = { 'Zusatz_SA_LR' : { " + Zusatz_HTZ_SA_LR + "}, 'ZusatzVariante_SA_LR' : { " + Zusatz_Varianten_SA_LR + "} };" );  
                      			file.close();  
                        
                      			return;  
                      		};
                      
                      		function Auswahl2()  
                      		{  
                      			var vkZusatz_SA_LR = new LinkedSelectionZusatz_SA_LR( [ 'Zusatz_SA_LR', 'ZusatzVariante_SA_LR' ], ergebnisZeigenZusatz_SA_LR, Zusatzmatten_SA_LR );  
                      		};
                      

                      Und da kommt die Fehlermeldung des Ungültigem Zeichen in Zeile und Zeichen 1 sowie das die Variable Zusatzmatten_SA_LR undefiniert sei.

                      LG Romero

                2. Woran kann ich noch drehen oder was muss ich an meinem Script verändern, damit es auch für den verf... IE8 (oder höhere) klappt?

                  Bitte helft mir. Bin echt am verzweifeln. Zumal ich diesmal echt nicht weiß, was dem IE diesmal stört.

                  LG Romero

                  1. Hallo romero,

                    Woran kann ich noch drehen oder was muss ich an meinem Script verändern, damit es auch für den verf... IE8 (oder höhere) klappt?

                    <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7">

                    muss das sein?

                    »» function init_Zusatzmatten_SA_LR()

                      {  
                    
                      	AuswahlForZusatz\_SA\_LR( out\_zusatz\_SA\_LR, list\_zusatz\_SA\_LR );  
                    
                      	s = document.createElement( "script" );  
                      	s.setAttribute( "type", "text/javascript" );  
                      	s.setAttribute( "src", Pfad\_Temp\_Benutzer + "/Zusatzmattenauswahl\_SA\_LR.js" );  
                      	  
                      	document.getElementsByTagName( 'head' )[0].appendChild(s);  
                    
                      	Auswahl2();	  
                    
                      };  
                    

                    so wird das Script asyncron geladen, d.h. das Script ist noch nicht verfügbar, wenn Auswahl2(); aufgerufen wird.

                    Von HTA und ActiveX habe ich keine Ahnung, daher kann ich da auch nicht wirklich helfen. Bau alerts oder andere Ausgaben ein, damit du die Inhalte der Variablen kennst und weißt, wo das Script abstürzt. try-catch ist da keine Debug-Option.

                    Gruß, Jürgen

                    1. Erstmal Danke das mir wenigstens einer zuhört bzw. mitliest :)

                      <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7">  
                      

                      muss das sein?

                      Ja weil Aufgrund der Darstellungsunterschiede zwischen IE6 bzw. 7 und IE8 (und andere) es zu "Verzehrungen" kommt, deshalb hab mich für diesen Weg entschieden.

                      »» function init_Zusatzmatten_SA_LR()

                        {  
                      
                        	AuswahlForZusatz\_SA\_LR( out\_zusatz\_SA\_LR, list\_zusatz\_SA\_LR );  
                      
                        	s = document.createElement( "script" );  
                        	s.setAttribute( "type", "text/javascript" );  
                        	s.setAttribute( "src", Pfad\_Temp\_Benutzer + "/Zusatzmattenauswahl\_SA\_LR.js" );  
                        	  
                        	document.getElementsByTagName( 'head' )[0].appendChild(s);  
                      
                        	Auswahl2();	  
                      
                        };  
                      

                      so wird das Script asyncron geladen, d.h. das Script ist noch nicht verfügbar, wenn Auswahl2(); aufgerufen wird.

                      Von HTA und ActiveX habe ich keine Ahnung, daher kann ich da auch nicht wirklich helfen. Bau alerts oder andere Ausgaben ein, damit du die Inhalte der Variablen kennst und weißt, wo das Script abstürzt. try-catch ist da keine Debug-Option.

                      D.h. also ich müsste erstmal überprüfen, ob das Neu-erzeugte-Element da ist, bevor ich die Auswahl2() starte?

                      Oder welche herangehensweise bevorzugst du in diesem Fall?

                      Hab ja alert()'s und co schon eingebaut. So wird mir (nach dem appendChild()) zu alert( Zusatzmatten_SA_LR ) für den IE6 ein object object ausgegeben, was heißt das da was gefunden wurde. Bei IE8 jedoch nicht.

                      Es wird bei beiden in den HEADer dieses Script-Element mit dem Pfad angehangen und auch ausgegeben. Der Benutzer_Pfad auch richtig ausgegeben.

                      Bisher halt alles richtig. Nur das er diese Variable der Datei unter den Temp-Ordner nicht findet.

                      LG Romero

                      1. Hallo romero,

                        D.h. also ich müsste erstmal überprüfen, ob das Neu-erzeugte-Element da ist, bevor ich die Auswahl2() starte?

                        Oder welche herangehensweise bevorzugst du in diesem Fall?

                        diese: https://forum.selfhtml.org/?t=212267&m=1449664

                        Gruß, Jürgen

                        1. Hallo Jürgen,

                          diese: https://forum.selfhtml.org/?t=212267&m=1449664

                          Hab ich mir schon heran gezogen und auch so übernohmen. Aber wo schiebe ich da diese Auswahl2() hin? Lass ich sie an der bisherigen Stelle stehen? Oder muss ich sie da irgendwo hinein basteln?

                          LG Romero

                          1. Hallo romero,

                            diese: http://forum.de.selfhtml.org/my/?t=212267&m=1449664

                            Hab ich mir schon heran gezogen und auch so übernohmen. Aber wo schiebe ich da diese Auswahl2() hin? Lass ich sie an der bisherigen Stelle stehen? Oder muss ich sie da irgendwo hinein basteln?

                            das ist dann die callback-Funktion, die nach dem Laden aufgerufen wird:

                            LoadScript("....js",Auswahl2);

                            Gruß, Jürgen

                            1. Hallo romero,

                              diese: http://forum.de.selfhtml.org/my/?t=212267&m=1449664

                              Hab ich mir schon heran gezogen und auch so übernohmen. Aber wo schiebe ich da diese Auswahl2() hin? Lass ich sie an der bisherigen Stelle stehen? Oder muss ich sie da irgendwo hinein basteln?

                              das ist dann die callback-Funktion, die nach dem Laden aufgerufen wird:

                              LoadScript("....js",Auswahl2);

                              Gruß, Jürgen

                              Danke erstmal.
                              So hab es auch gleich getestet. Mit dem selben Ergebnis. Ungültige Zeichen bei "file:///C:/DOCUME~1/"hier der Name des Benutzers/LOCALS~1/Temp/Zusatzmatten_SA_LR.js" -> also der Temp-Pfad des Nutzers.

                              LG Romero

                              PS:krieg bald die Motten :(

                              1. Hallo romero,

                                So hab es auch gleich getestet. Mit dem selben Ergebnis. Ungültige Zeichen bei "file:///C:/DOCUME~1/"hier der Name des Benutzers/LOCALS~1/Temp/Zusatzmatten_SA_LR.js" -> also der Temp-Pfad des Nutzers.

                                hast du mal die ~ durch den echten Namen ersetzt?

                                Gruß, Jürgen

                                1. Hallo romero,

                                  So hab es auch gleich getestet. Mit dem selben Ergebnis. Ungültige Zeichen bei "file:///C:/DOCUME~1/"hier der Name des Benutzers/LOCALS~1/Temp/Zusatzmatten_SA_LR.js" -> also der Temp-Pfad des Nutzers.

                                  hast du mal die ~ durch den echten Namen ersetzt?

                                  Gruß, Jürgen

                                  Hallo Jürgen,

                                  naja dieser Pfad ist ja eigentlich der Pfad welchen ich mir durch dieses ActiveXobject ja ausgebe. Also den Absoluten Pfad des Temp's Ordners. Diese Schreibweise war ja nur die, welche mir die Fehlerausgabe gezeigt hatte.

                                  Also hieß da mein function wie folgt:
                                  LoadScript( Pfad_Temp_Benutzer + "/Zusatzmatten_SA_LR.js", Auswahl2 ) bzw.
                                  LoadScript( "C:/Documents and Settings/romero/Local Settings/Temp/Zusatzmattenauswahl_SA_LR.js", Auswahl2 );

                                  Beide male brachte er mir das mit den Ungültige Zeichen. Und somit auch das die Variable undefiniert ist. Er findet es irgendwie nicht. Aber ich sehe anhand der Uhrzeit und Datum, dass diese Datei überschrieben wurde.

                                  LG Romero

                                  1. Hallo romero,

                                    Also hieß da mein function wie folgt:
                                    LoadScript( Pfad_Temp_Benutzer + "/Zusatzmatten_SA_LR.js", Auswahl2 ) bzw.
                                    LoadScript( "C:/Documents and Settings/romero/Local Settings/Temp/Zusatzmattenauswahl_SA_LR.js", Auswahl2 );

                                    Beide male brachte er mir das mit den Ungültige Zeichen. Und somit auch das die Variable undefiniert ist. Er findet es irgendwie nicht. Aber ich sehe anhand der Uhrzeit und Datum, dass diese Datei überschrieben wurde.

                                    dann versuch es mal ohne Pfad, du kannst ja zum Testen alles in einen Ordner legen. Wenn es dann geht, bist du sicher, das der Name des Scriptes mit Pfad nicht ok ist.

                                    Gruß, Jürgen

                                    1. Hallo romero,

                                      Also hieß da mein function wie folgt:
                                      LoadScript( Pfad_Temp_Benutzer + "/Zusatzmatten_SA_LR.js", Auswahl2 ) bzw.
                                      LoadScript( "C:/Documents and Settings/romero/Local Settings/Temp/Zusatzmattenauswahl_SA_LR.js", Auswahl2 );

                                      Beide male brachte er mir das mit den Ungültige Zeichen. Und somit auch das die Variable undefiniert ist. Er findet es irgendwie nicht. Aber ich sehe anhand der Uhrzeit und Datum, dass diese Datei überschrieben wurde.

                                      dann versuch es mal ohne Pfad, du kannst ja zum Testen alles in einen Ordner legen. Wenn es dann geht, bist du sicher, das der Name des Scriptes mit Pfad nicht ok ist.

                                      Gruß, Jürgen

                                      Hallo Jürgen,

                                      hab diese *.JS-Datei mal in einen für alle Nutzer zugänglichen Ordner geschoben bzw. den Benutzer_Pfad auf diesen geändert, und siehe da, es funktioniert.

                                      Diese Datei wird gefunden und es funktioniert alles wunderbar.
                                      Woran liegt es also dass er diesen Ordner nicht findet bzw. kein Zugriff drauf hat?

                                      LG Romero

                                      1. Hallo romero,

                                        hab diese *.JS-Datei mal in einen für alle Nutzer zugänglichen Ordner geschoben bzw. den Benutzer_Pfad auf diesen geändert, und siehe da, es funktioniert.

                                        Diese Datei wird gefunden und es funktioniert alles wunderbar.
                                        Woran liegt es also dass er diesen Ordner nicht findet bzw. kein Zugriff drauf hat?

                                        da kann ich nur raten bzw. vermuten:

                                        / oder \ Leerzeichen
                                        file:// oder c:\

                                        Ich habe es immer geschafft, auf absolute Pfade zu verzichten.

                                        Gruß, Jürgen

                                        1. Hallo Jürgen,

                                          erst einmal muss ich dir rechtherzlichen Danken. Du warst bisher einer der wenigen welcher immer mit gutem Rat und Tat mir zu Seite stand und hiflreiche Tipps und auch Code-Auszüge gegeben hast. Daher dir ein großes Danke.

                                          da kann ich nur raten bzw. vermuten:

                                          / oder \ Leerzeichen
                                          file:// oder c:\

                                          Ich habe es immer geschafft, auf absolute Pfade zu verzichten.

                                          Wie meinst du das jetzt genau auf absolute Pfade verzichten? Möchte aber ja da den Temo-Ordner des Nutzers ansteuern, welches mir ja das System vorgibt. Warum macht er da so "blöde"?

                                          Und was genau meinst du mit diesen / oder \ und so weiter? Kannst du da mal ein Bsp. geben? Bin grad irgendwie aufn Holzweg :)

                                          LG Romero

                                          1. Hallo romero,

                                            Und was genau meinst du mit diesen / oder \ und so weiter? Kannst du da mal ein Bsp. geben? Bin grad irgendwie aufn Holzweg :)

                                            im WWW: http://www.example.org/ordner/seite.html

                                            von der Festplatte:

                                            FF: file:///C:/Users/JB/Desktop/seite.html

                                            IE: C:\Users\JB\Desktop\seite.html

                                            Gruß, Jürgen

                                            1. Hallo Jürgen,

                                              im WWW: http://www.example.org/ordner/seite.html

                                              von der Festplatte:

                                              FF: file:///C:/Users/JB/Desktop/seite.html

                                              IE: C:\Users\JB\Desktop\seite.html

                                              Vielen Dank für die Beispiele. Ich habe ja nun mittels folgendem Code:

                                              					var WshShell = new ActiveXObject("WScript.Shell");  
                                              					var WshSysEnv = WshShell.Environment("Process");  
                                              					  
                                              					Pfad_Temp_Benutzer = WshSysEnv("TEMP");
                                              

                                              mir den aktuellen Pfad des Temps-Ordners ausgegeben.
                                              Er bringt mir da z.B. foldenden String: C:\Documente\Romero\Lokales\Temp

                                              Und wie schreibe ich dann weiter? Also die Funktion LoadScript()? In etwa so? LoadScript( Pfad_Temp_Benutzer + "\Zusatzmatten_SA_LR.js", Auswahl2 )

                                              Da läuft er unter IE6 einwandtfrei aber unter IE8 kommt wieder diese Fehlermeldung mit dem Ungültigen Zeichen.

                                              Wie baut man für den IE also ein Pfad aus einem String und einer genauen Dateibezeichnung zusammen?

                                              LG Romero

                                              1. Hallo romero,

                                                Und wie schreibe ich dann weiter? Also die Funktion LoadScript()? In etwa so? LoadScript( Pfad_Temp_Benutzer + "\Zusatzmatten_SA_LR.js", Auswahl2 )

                                                hast du dir schon mal den String angesehen?

                                                Was liefert alert( Pfad_Temp_Benutzer + "\Zusatzmatten_SA_LR.js" ); ?

                                                Wenn da

                                                C:\Documente\Romero\Lokales\Temp\Zusatzmatten_SA_LR.js

                                                kommt, weiß ich auch nicht mehr weiter.

                                                Gruß, Jürgen

                                                1. Hallo Jürgen,

                                                  Was liefert alert( Pfad_Temp_Benutzer + "\Zusatzmatten_SA_LR.js" ); ?

                                                  Wenn da

                                                  C:\Documente\Romero\Lokales\Temp\Zusatzmatten_SA_LR.js

                                                  kommt, weiß ich auch nicht mehr weiter.

                                                  Es kommt genau dieser String den du da oben angegeben hast.
                                                  Wenn ich aber als Pfad_Temp_Benutzer folgenden Pfad angebe: G:/Neuer Ordner und dann als 2. Teil "/Zusatzmatten_SA_LR.js" angebe, dann klappt alles.

                                                  Ich habe ja auch die anderen Pfade (z.B. Icons = "X:/Arbeitsvorbereitung/_Tools/StuecklistenScript/Icons/" ) so angegeben.

                                                  Was macht er also anderser oder was stört diesem verf... IE8 denn noch?

                                                  LG Romero

                                                  1. Habs jetzt anderser gelöst. ich hoffe das es bei höheren IE's (9+) auch funktioniert.

                                                    Ich habe nun einen Ordner händisch eingetragen, "G:/Temp". und die Funktion LoadScript wie folgt aufgerufen: LoadScript( Pfad (hier kommt dann G:/Temp) + "/Zusatzmattenauswahl_SA_LR.js" )

                                                    Und diese Sache läuft sowohl beim IE6 als auch beim IE8, warum das nun so ist, fragt mich was leichteres.

                                                    Das Auslesen des eigenen Temp-Ordners des Benutzers sah so aus C:......... und mit der Pfad-Erweiterung zur Datei "\Zusatzmattenauswahl_SA_LR.js" kam der IE8 irgendwie nicht klar. Es wurde zwar der richtige Pfad mittels alert() ausgegeben aber irgendwelche "Ungültige Zeichen" störten ihn trotzdem noch.

                                                    Nunja. Sofern ein anderer noch ne kluge Idee hat, lasst es mich wissen.
                                                    Jedenfalls klappt es mittels dem händischen Eintragen eines Ordners, wo alle Zugriff drauf haben, und das "Problem" scheint vom Tisch :)

                                                    LG Romero

                                                    1. Hallöchen an Euch da draußen,

                                                      ich habe erneut ein Versuch gestartet, der wie folgt aussieht:

                                                      			var WshShell = new ActiveXObject("WScript.Shell");  
                                                      			var WshSysEnv = WshShell.Environment("Process");	  
                                                      			  
                                                      			Pfad_Temp_Benutzer = WshSysEnv("TEMP").replace( /\\/g, "/" );  
                                                      			Pfad_Temp = WshSysEnv("TEMP");			  
                                                      			Pfad_Temp_Benutzer_Zusatzmatten = liesDateien( Pfad_Temp ).replace( /\\/g, "/" );  
                                                      			  
                                                      			function liesDateien( src )  
                                                      			{  
                                                      				var fso, folder, folderfiles;  
                                                        
                                                      				fso = new ActiveXObject( "Scripting.FileSystemObject" );  
                                                      				folder = fso.GetFolder( src );  
                                                      				folderfiles = new Enumerator( folder.files );  
                                                        
                                                      				fileList = new Array();  
                                                        
                                                      				for(; !folderfiles.atEnd(); folderfiles.moveNext() )  
                                                      				{  
                                                      					s = "";  
                                                      					s += folderfiles.item();  
                                                      					fileList [fileList.length] = s;  
                                                      				};  
                                                      				  
                                                      				for( var i = 0; i < fileList.length; i++ )  
                                                      				{  
                                                      					if( fileList[i].search( /Zusatzmattenauswahl_SA_LR/ ) != -1 ) { var foundFile = fileList[i]; };  
                                                      				};  
                                                        
                                                      				return (foundFile);  
                                                      			};
                                                      

                                                      Kurze Beschreibung:

                                                      Ich lasse mir 1. vom System den Temp-Ordner eines jeden Nutzers ausgeben und durchsuche als 2. diesen Ordner bzw. lese ihn aus.

                                                      Dabei suche ich nach einer bestimmten Datei und gebe mir dessen Pfad aus, welchen ich in eine globale Variable speichere.

                                                      Nun rufe ich, wie bereits eine Antworten vorher die Funktion LoadScript( Pfad_Temp_Benutzer_Zusatzmatten, Auswahl2 ) auf. Aber da ist wieder dieser Fehler mit dem Ungültige Zeichen. Und da ist es egal, ob ich da bei Pfad_Temp_Benutzer_Zusatzmatten = liesDateien( Pfad_Temp ).replace( /\\/g, "/" ); das .replace() weglasse oder nicht.

                                                      Woran liegt also das Problem?

                                                      LG Romero

                                                      1. Hallo romero,

                                                        ich habe das gerade mal getestet, aber nur im IE9 als IE8-Emulator.

                                                        Der Dateiname muss folgende Form haben: "file:///C:/Users/Vorname%20Nachname/.../datei.js" Lasse ich z.B. eins von den drei "///" weg oder verändere den Pfad, kommt die Fehlermeldung "Ungültiges Zeichen", aber nicht in der Ladefunktion, in Zeile 1 der leeren "datei.js". Die Meldung scheint darauf hinzudeuten, dass das Script nicht gefunden wurde, weil der Pfad oder der Dateiname nicht stimmt.

                                                        Gruß, Jürgen

                                                        1. Hallo Jürgen,

                                                          Der Dateiname muss folgende Form haben: "file:///C:/Users/Vorname%20Nachname/.../datei.js" Lasse ich z.B. eins von den drei "///" weg oder verändere den Pfad, kommt die Fehlermeldung "Ungültiges Zeichen", aber nicht in der Ladefunktion, in Zeile 1 der leeren "datei.js". Die Meldung scheint darauf hinzudeuten, dass das Script nicht gefunden wurde, weil der Pfad oder der Dateiname nicht stimmt.

                                                          wenn ich aber mir den Pfad des Temps-Ordners aber vom System her ausgeben lasse dann gibt er mir ja folgendes aus: C:\Doc...\Romero\Local...\Temp.

                                                          Also müsste ich meinen Pfad wie folgt zusammenstellen, um es korrekt einlesen lassen zu können:

                                                          			var WshShell = new ActiveXObject("WScript.Shell");  
                                                          			var WshSysEnv = WshShell.Environment("Process");  
                                                          			  
                                                          			Pfad_Temp = WshSysEnv("TEMP").replace( /\\/g, "/" );  
                                                          			Pfad_Temp_Benutzer = "file:///" + Pfad_Temp;
                                                          

                                                          Oder schreibt er sich dieses "file:///" selber dazu?
                                                          Weil solche gravierenden Probleme hatte ich bisher nicht.

                                                          Und für die Funktion LoadScript() folgendes angeben:

                                                          LoadScript( Pfad_Temp_Benutzer + "/Zusatzmattenauswahl_SA_LR.js", Auswahl2 );

                                                          LG Romero

                                                          1. Hallo romero,

                                                            Der Dateiname muss folgende Form haben: "file:///C:/Users/Vorname%20Nachname/.../datei.js" ...

                                                            ich habe den Dateinamen so oder zum Testen auch modifiziert als Konstante eingegeben.

                                                            wenn ich aber mir den Pfad des Temps-Ordners aber vom System her ausgeben lasse dann gibt er mir ja folgendes aus: C:\Doc...\Romero\Local...\Temp.

                                                            OK, das kommt ja auch aus dem ActiveX.

                                                            Also müsste ich meinen Pfad wie folgt zusammenstellen, um es korrekt einlesen lassen zu können:

                                                            		var WshShell = new ActiveXObject("WScript.Shell");  
                                                            
                                                              	var WshSysEnv = WshShell.Environment("Process");  
                                                              	  
                                                              	Pfad_Temp = WshSysEnv("TEMP").replace( /\\/g, "/" );  
                                                              	Pfad_Temp_Benutzer = "file:///" + Pfad_Temp;
                                                            
                                                              
                                                            würde ich auch so sehen. Aber mach eine Kontrollausgabe.  
                                                            
                                                            >   
                                                            > Oder schreibt er sich dieses "file:///" selber dazu?  
                                                              
                                                            Nein.  
                                                              
                                                            Probier es einfach aus, und wenn ein Fehler kommt, prüfe wo.  
                                                              
                                                            Gruß, Jürgen  
                                                            
                                                            
            3. Ich habe auch das .replace schon weggelassen. Aber auch das hat nicht gefruchtet.

              Was stört dem IE8 also noch? ich habe es ja von vieles Seiten so gelesen?
              Das erstellen in den Benutzer_temporären_Pfad klappt ja, nur (so vermute ich) das Auslesen der Datei nicht? Aber laut:

              var t = document.getElementsByTagName('head')[0].childNodes;  
              for( var i = 0; i < t.length; i++ )  
              {  
               if( t[i].getAttribute('src') != null ) { alert( i + " " + t[i].getAttribute('src') ); };  
              };
              

              zeigt er mir den korrekten Pfad mit der korrekten Datei (und mit der korrekten Variablen in der Datei (var Zustatzmatten_SA_LR)).

              Kann jemand einen Code zeigen, wo das Auslesen des temporären Pfades eines Nutzers angezeigt wurde bzw. ich ihn für andere Dinge verwenden kann? Bitte getestet für IE8 bzw. auch gleich für höhere IE's.

              LG Romero

          2. Hallo romero,

            Mittels der Fehlerkonsole des IE8 kommt hier de Fehler, dass er kein Automatisierungserver zu diesem Objekt erstellen kann:

            		var WshShell = new ActiveXObject("WScript.Shell");  
            
              	var WshSysEnv = WshShell.Environment("Process");			  
              	Pfad_Temp_Benutzer = WshSysEnv("TEMP").replace( /\\/g, "/" );
            
            
            >   
            > kommt der Fehler in jeder Zeile? Hast du das ".replace(...) schon mal weggelassen?  
            >   
            > Gruß, Jürgen  
            >   
              
            Nein die Fehlermeldung beginnt bei `var WshShell = new ActiveXObject("WScript.Shell");`{:.language-javascript}  
              
            Und dann macht "er" halt nicht weiter.  
              
            Wenn ich aber andere ActiveXObject erstelle (z.B. eine EXCEL-APPLICATION) dann funktioniert es. Das Problem ist, dass er an der Stelle den temporären Pfad jedes Nutzers braucht, weil er da Daten ablegt, welche er dann wie weiter oben geschrieben als src="irgendwas.js" wieder einliest.  
              
            Klammere ich aber den (1.) fehlerhaften ActiveXObject aus (mit //), dann bringt mir die Fehlerkonsole des IE8 weitere Automatisierungsfehler.  
              
            Bin irgendwie total überfordert, zumal wenn ich diese \*.HTA-Datei starte und ohne diesen Pfad benutzen zu müssen (wird nicht bei jeder Auswahl benötigt), läuft alles wunderbar und wie gewollt. Ändere ich nun die Endung von HTA auf HTML dann startet das Script aber diverse ActiveXObject werden nicht ausgeführt. Wie das Schreiben in eine EXCEL-Tabelle.  
              
            LG Romero