JavaScript Window Objekt speichern

katamshut

Grünschnabel
Hallo

Ich möchte ein Window Objekt Global oder einfach immer abrufbar speichern. Problem ist, dass meine globale Javascript Variable popUpWin durch Ajax immer wieder gelöscht wird und nicht mehr benutzbar ist.

Gibt es möglichkeiten ein Javascriptvariable irgendwie gegen Ajax resistent zu machen? Cookies vielleicht?

Gruss
Christian
 
nun wie meinst du das?

wann soll ich die variable umbenennen? Vielleicht zur verdeutlichung:

ich erstelle ein window popup wie folgt:

winPopUp = open(....);

nun habe ich eine referenz auf das fenster in winPopUp und kann so zu einem späteren Zeitpunkt das Popup mit winPopUp.close(); wieder schliessen. Kacke ist nun, dass zwischenzeitlich durch Ajax die Seite neu gererendert wurde und die die Variable wie durch ein Refresh der Seite neu initialisiert wurde. Also verlier ich die Referenz zum Popup und kann es nun nicht mehr schliessen, da es auch keine möglichkeit gibt, alle Kinderfenster ala this.allchilds.close(); zu schliessen.

nun was meinst du mit umbenennen?

Danke und Gruss
Chris
 
Vielleicht solltest du demnächst besser erklären, was da vor sich geht.

Wenn die komplette Seite neugeladen wird, geht die Variable unweigerlich verloren, Zugriff darauf ist nicht mehr möglich.
Allerdings frage ich mich, wozu du AJAX einsetzt, wenn die ganze Seite neugaladen wird :confused:
 
Hallo rotzlöffeli

Ich sagte "wie durch ein Refresh" nicht dass ich die Seite neu lade. Ja ich verwende AJAX und genau das ist mein Problem, was ich nicht verstehe. Warum wird meine Globale JS Variable durch ein Respond von AJAX WIE bei einem Refresh der Seite gelöscht? Das sollte nicht sein!

-> Zur Erinnerung: Mein Ziel, ein Kindfenster per "popUpWin.close();" schliessen können. Also sehr einfach aber eben... es geht nicht!

Hier ein vereinfachtes Beispiel meines Problems zur Verdeutlichung:

HTML:
<html>
<head>
  <script type="text/javascript">
  
  var popUpWin=0;

	function popUpWindow(URLStr, left, top, width, height)
	
	{
	
	  if(popUpWin)
	
	  {
	
	    if(!popUpWin.closed) popUpWin.close();
	
	  }
	  
	  popUpWin = open(URLStr, 'pdfservlet', 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbar=no,resizable=yes,copyhistory=yes,width='+width+',height='+height+',left='+left+', top='+top+',screenX='+left+',screenY='+top+'');
	
	}
</script>
</head>
<body>
<f:view locale="#{myBean.locale}">
<h:form id="druck">
<h:panelGrid id="d_action_tabelle" columns="1" border="0" cellspacing="0" cellpadding="0" styleClass="tab_Buttons">
<h:panelGroup>
<a4j:commandButton action="#{myBean.printbean.drucken}" 
value="#{msg.druck_drucken}"
title="#{msg.druck_drucken_hilfe}"
onclick="this.disabled=true;document.print_button=this" 
oncomplete="document.print_button.disabled=false;popUpWindow('print.jsf',0,0,1016,724);"
></a4j:commandButton>
</h:panelGroup></h:panelGrid>
</h:form>
</f:view>
</body>
</html>
 
Ok hier mein durch JSF geparster HTML Code:

HTML:
<html>

	<head>

	  <script type="text/javascript">
  
 	 var popUpWin=0;

	function popUpWindow(URLStr, left, top, width, height)
	
	{

	  if(popUpWin)
	
	  {
	
	    if(!popUpWin.closed) popUpWin.close();
	
	  }
	  
	  popUpWin = open(URLStr, 'pdfservlet', 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbar=no,resizable=yes,copyhistory=yes,width='+width+',height='+height+',left='+left+', top='+top+',screenX='+left+',screenY='+top+'');
	
	}

	</script>
	
	</head>

	<body scroll="auto" onload="document.forms[0].setAttribute('autocomplete', 'off');">
		<form id="druck" name="druck" method="post" action="/app/Print.jsf" enctype="application/x-www-form-urlencoded">
			<div class="content"><div class="contentApp"><table id="druck:d_action_tabelle"><tbody><tr><td>
				<input id="druck:printButton" name="druck:printButton" onclick="this.disabled=true;document.print_button=this;A4J.AJAX.Submit('_viewRoot','druck',event,{'parameters':{'druck:printButton':'druck:printButton'} ,'actionUrl':'/app/Print.jsf','oncomplete':function(request,event,data){document.print_button.disabled=false;popUpWindow('pdfservlet',0,0,1016,724);}} );return false;" value="Drucken" title="Drucken" type="button" />
			</td></tr></tbody></table></div></div>
		</form>
	</body>
</html>

Danke für euren Input..
Gruss
Christ
 
es liegt wohl daran, dass ich keine regionen definiert habe, welche vom browser zur parsung abgesendet werden sollen und welche eben nicht od. welche bereiche von Ajax vom Server an mein client zurückgesendet werden und welche nicht. Das führt dazu, dass Ajax mir die ganze Seite inkl. globalen Variabeln überschreibt.

Ich habe nun den Versuch mit Cookies probiert und mir kommt das ****.

folgend mein JavaScript Code zur speicherung eines Cookies:

HTML:
	<script type="text/javascript">
	var popUpWin=0;
	
	function popUpWindow(URLStr, left, top, width, height){
	alert('Teste popUpWin : "' + popUpWin + '"');
	alert('Teste popUpWin : "' + popUpWin + '"');
  	if (document.cookie) {
  		alert('Cookie vorhanden...');
	  	ezTarifCookie = document.cookie;
	  	alert('starte loop');
	  	var cookiename = '';
	  	var cookiewert = '';
	  	alert('Teste localPopUpWin : "' + localPopUpWin + '"');
	  	while(cookiename != 'popUpWin' && ezTarifCookie.length > 0){
	  		alert('ezTarifCookie = "' + ezTarifCookie + '"');
			cookiename = ezTarifCookie.substr(0,ezTarifCookie.search('='));
			alert('name = ' + cookiename);
			cookiewert = ezTarifCookie.substr(ezTarifCookie.search('=')+1,ezTarifCookie.search(';')-ezTarifCookie.search('=')+1);
			alert('wert = "' + cookiewert + '"');
			ezTarifCookie = ezTarifCookie.substr(ezTarifCookie.search(';'),ezTarifCookie.length-ezTarifCookie.search(';'));
		}
		if(cookiename == 'popUpWin'){
			alert('popUpWin vorhanden');
			localPopUpWin = cookiewert;
		} else {
			alert('popUpWin nicht vorhanden');
			}	
		} else {
		alert('Kein cookie vorhanden..');
		}
	alert('Teste popUpWin : "' + localPopUpWin + '"');
  	if(localPopUpWin){
  		alert('localPopUpWin hat Wert: ' + localPopUpWin);
		if(!localPopUpWin.closed) {alert('Fenster nicht geschlossen');localPopUpWin.close();alert('Fenster geschlossen');}
  		}
	alert('Neues Fenster öffnen');
  	document.cookie = "popUpWin=" + open(URLStr, 'pdfservlet', 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbar=no,resizable=yes,copyhistory=yes,width='+width+',height='+height+',left='+left+', top='+top+',screenX='+left+',screenY='+top+'');	
	}
	</script>

Für Debug Zwecke gebe ich mit Alert die Werte meiner Variablen aus:

ganz oben findet sich dieser Code:

HTML:
	alert('Teste popUpWin : "' + popUpWin + '"');
	alert('Teste popUpWin : "' + popUpWin + '"');

Ganz verblüffend passiert an dieser Stelle zuerst ein Alert und beim nächsten bricht der JavaCode ab. Es ist, also ob meine Variable - popUpWin - eine EINWEG variable wäre, welche NUR einmal gelesen werden kann was ist hier los?

Ich bin nur noch Ratlos.
 
es liegt wohl daran, dass ich keine regionen definiert habe, welche vom browser zur parsung abgesendet werden sollen und welche eben nicht od. welche bereiche von Ajax vom Server an mein client zurückgesendet werden und welche nicht. Das führt dazu, dass Ajax mir die ganze Seite inkl. globalen Variabeln überschreibt.

Dann solltest du wohl diese Regionen definieren.

Ansonsten:Cookies können nur Strings speichern, keine Objekte.
 
Ja ich kann Regionen definieren. Nur ist mein Anwendungsfall weitaus komplizierter als das vereinfachte Beispiel, welches ich hier aufgeführt habe. Daher dachte ich es wäre einfacher mit Cookies zu spielen als mit dem doch eher komplexeren Thema Regionen auseinander zu setzten.

Gibt es eigentlich ein a4j protect oder ähnliches, damit ich einen Bereich im JSP / Facelet vor rerendering schützen kann?
 

Neue Beiträge

Zurück