Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

javascript Link funktioniert erst beim 2ten Klick

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
workershop
PostRank 8
PostRank 8
Beiträge: 697
Registriert: 19.11.2004, 19:08
Wohnort: Leipzig

Beitrag von workershop » 06.04.2012, 12:23

Hi,

ich habe unter www.Bushcraft-Deutschland.de einen Chat eingebaut, der nur für User funktioniert. Die Logindaten des Forums werden zum Chat so übernommen:

Code: Alles auswählen

<!-- IF S_USER_LOGGED_IN --> 
<script language="JavaScript" type="text/javascript"> 
var userName = '&#123;S_USERNAME&#125;'; 
var userID = '&#123;S_USERID&#125;'; 
var roomID = "Lobby"; 
</script> 
<script language="JavaScript" type="text/javascript" src="http&#58;//www.bushcraft-deutschland.de/chat/chat.js"></script> 
<!-- ENDIF --> 
In der chat.js steht folgender Inhalt:

Code: Alles auswählen

function launchChat&#40;&#41; 
&#123; 
var xOffSet = &#40;screen.width - 225&#41; / 2;
var yOffSet = &#40;screen.height - 500&#41; / 2;
var features = 'width=900,height=700,toolbar=0,directories=0,menubar=0,status=0,location=0,scrollbars=0,resizable=1';
var winName = 'chat';
var chatUrl = 'http&#58;//'+location.hostname+'/chat/index.php?uid='+userID+'&uname='+userName+'&room='+roomID;
myWin = window.open&#40;chatUrl,winName,features&#41;;

function createCookie&#40;name,value,days&#41; &#123;
	if &#40;days&#41; &#123;
		var date = new Date&#40;&#41;;
		date.setTime&#40;date.getTime&#40;&#41;+&#40;days*24*60*60*1000&#41;&#41;;
		var expires = "; expires="+date.toGMTString&#40;&#41;;
	&#125;
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
&#125;
createCookie&#40;'login','login',1&#41;;

&#125;
Der js. Link zum Chat schaut so aus: <a class="orphan item bullet" href="javascript:launchChat();"><span>Chat</span></a>

Mit einem Safari Desktopbrowser (nicht mobile) funktiniert es auch einwandfrei - ein Klick und man ist eingeloggt im Chat.

Das Problem ist nur, mit dem IE, Mozilla, Opera etc. öffnet sich beim Klick der Chat mit der Fehlermeldung: Login error, please try again.

Schliest man jedoch das Chatfenster und klickt noch einmal funktioniert es einwandfrei ;- ( und das ist bei den 3 Browsern (aktuellste Version) immer so.

Jemand eine Idee, warum es beim ersten Klick mit den 3 Browsern nicht funktioniert?

Gruss Ronny

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 06.04.2012, 12:41

Also, ich rate hier nun mal ins Blaue, denn einen ähnlichen Fall hatte ich auch mal. Ich weiß nicht woher genau die Fehelrmeldung kommt, oder wer die ausgibt, daher das Raten.

Schau speziell mal im Bereich des Cookies. Wenn ich mich nun nicht komplett irre, dann zählt ein gesetztes Cookie erst beim nächsten Aufruf. Wird also das Cookie gesetzt und eine Funktion dahinter prüft direkt, ob vorhanden und steuert dann auch die Fehlermeldung, dann wird hier der Hund begraben sein.

Cookie setzen
-> reload
-> Zugriff

Aber nur, wenn ich mich nun nicht komplett irre.

Wobei... edit... Du Öffnest den Chat ja zuerst und setzt danach erst das Cookie. Also ist das beim Erstaufruf ja gar nicht vorhanden.

workershop
PostRank 8
PostRank 8
Beiträge: 697
Registriert: 19.11.2004, 19:08
Wohnort: Leipzig

Beitrag von workershop » 06.04.2012, 12:53

Das mit dem Cookie ist schon mal nicht schlecht. Die Fehlermeldung wird hier generiert:

Code: Alles auswählen

/*
* cms integration
*
*/

if&#40;$CONFIG&#91;'CMS'&#93; && !isset&#40;$_GET&#91;'logout'&#93;&#41;&#41;
&#123;
	// cookie login
	if&#40;$_REQUEST&#91;'uname'&#93;&#41;
	&#123;

		if&#40;isset&#40;$_COOKIE&#91;'login'&#93;&#41;&#41;
		&#123;
			// assign user details
			$_REQUEST&#91;'userName'&#93; = $_REQUEST&#91;'uname'&#93;;
			$_SESSION&#91;'username'&#93; = $_REQUEST&#91;'uname'&#93;;
			$_SESSION&#91;'userid'&#93; = $_REQUEST&#91;'uid'&#93;;

			// unset login
			setcookie&#40;$_COOKIE&#91;'login'&#93;,'',time&#40;&#41;-3600&#41;;
		&#125;
		else
		&#123;
			die&#40;"Login error, please try again."&#41;;
		&#125;
	&#125;
Ist aber halt sonderbar, das es im Safari funktioniert - hat der eine andere Cookieverarbeitung?

Melegrian
PostRank 10
PostRank 10
Beiträge: 3170
Registriert: 30.01.2005, 12:36

Beitrag von Melegrian » 06.04.2012, 13:27

Mit Safari hatte ich bisher noch nicht viel zu tun, doch das Daten erst beim zweiten Aufruf von einem Formular ausgewertet werden, das kenne ich von einem anderen Fall und da half nur eine zweite Funktion. Allerdings ging es um Bildwerte, doch probieren könntest Du das auch:

Code: Alles auswählen

<a class="orphan item bullet" href="javascript&#58; Pruefe&#40;&#41;; launchChat&#40;&#41;;">
Mit Pruefe() erst abfragen, ob alle Werte übergeben wurden und diese zum Test mit alert anzeigen lassen.

Code: Alles auswählen

function Pruefe&#40;&#41;&#123;
alert &#40;"uid=" +userID+ "&uname=" +userName+ "&room=" +roomID&#41;;
// Und was da sonst noch wichtig ist…
&#125;
Hat zumindest bei meinem Fall geholfen.

workershop
PostRank 8
PostRank 8
Beiträge: 697
Registriert: 19.11.2004, 19:08
Wohnort: Leipzig

Beitrag von workershop » 06.04.2012, 13:40

Der gleiche Fehler, aber jetzt bring er mir vorher dem funktinierenden/fehlerhaften öffnen des Chattfensters das kleine alert Feld mit dem folgenden Inhalt: uid=2&uname=Ronny&room=Lobby

Der Link zum Chat ist der: https://www.website.de/chat/index.php?u ... room=Lobby

Also ist da mal nicht falsch - es geht warscheinlich wirklich nur im den Cookie der evt zu spät gesetzt wird. Kann ich irgend etwas hardcoden, das beim klick auf den Link dieser Intern 2 mal aufgerufen wird und man damit den Fehler umgeht? Dann funktioniert es wenigstens Optisch ;-)

Bin leider kein js. Profi

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 06.04.2012, 13:42

Ja dann fange doch erst mal damit an, die Reihenfolge im JS entsprechend zu ändern. Das sagte ich oben aber schon.

Du rufst aktuell zuerst window.open auf und dann createCookie.

workershop
PostRank 8
PostRank 8
Beiträge: 697
Registriert: 19.11.2004, 19:08
Wohnort: Leipzig

Beitrag von workershop » 06.04.2012, 13:48

Na das hatte ich schon gemacht, habe es nur noch nicht geschrieben:

Code: Alles auswählen

function createCookie&#40;name,value,days&#41; &#123;
	if &#40;days&#41; &#123;
		var date = new Date&#40;&#41;;
		date.setTime&#40;date.getTime&#40;&#41;+&#40;days*24*60*60*1000&#41;&#41;;
		var expires = "; expires="+date.toGMTString&#40;&#41;;
	&#125;
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
&#125;

createCookie&#40;'login','login',1&#41;;function launchChat&#40;&#41; 
&#123; 
var xOffSet = &#40;screen.width - 225&#41; / 2;
var yOffSet = &#40;screen.height - 500&#41; / 2;
var features = 'width=900,height=700,toolbar=0,directories=0,menubar=0,status=0,location=0,scrollbars=0,resizable=1';
var winName = 'chat';
var chatUrl = 'http&#58;//'+location.hostname+'/chat/index.php?uid='+userID+'&uname='+userName+'&room='+roomID;
myWin = window.open&#40;chatUrl,winName,features&#41;;
&#125;

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 06.04.2012, 13:56

So, und dann stell das ganze mal so ein, dass es einen Sinn ergibt. Also am besten auch mit Dateinamen, dass man weiß was hier wo hingehört...

Deine Webseite meldet nämlich auch, dass es gar keine Funktion launchChat() gibt.

Zu was gehört das "cms integration " oben? Ist das in der "/chat/index.php" oder wo?

workershop
PostRank 8
PostRank 8
Beiträge: 697
Registriert: 19.11.2004, 19:08
Wohnort: Leipzig

Beitrag von workershop » 06.04.2012, 14:07

Die Funktion launchChat() funktiniert erst wenn man im Forum angemeldet ist und steht im Header des Forums.

Code: Alles auswählen

<!-- IF S_USER_LOGGED_IN --> 
<script language="JavaScript" type="text/javascript"> 
var userName = '&#123;S_USERNAME&#125;'; 
var userID = '&#123;S_USERID&#125;'; 
var roomID = "Lobby"; 
</script> 
<script language="JavaScript" type="text/javascript" src="http&#58;//www.bushcraft-deutschland.de/chat/chat.js"></script> 
<!-- ENDIF --> 
Und ja, die cms integration steht in der index.php vom chat.

Ich habe gerade noch eine cookie.js entdeckt:

Code: Alles auswählen

/*
* user settings
*
*/

var userRPM = true;
var userRWebcam = false;
var userEntryExitSFX = true;
var userNewMessageSFX = true;
var userSFX = true;

/*
* create cookie
*
*/

function createCookie&#40;name,value,days&#41;
&#123;
	if&#40;days&#41;
	&#123;
		var date = new Date&#40;&#41;;
		date.setTime&#40;date.getTime&#40;&#41;+&#40;days*24*60*60*1000&#41;&#41;;
		var expires = "; expires="+date.toGMTString&#40;&#41;;
	&#125;
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
&#125;

createCookie&#40;'login','',-1&#41;;

/*
* read cookie
*
*/

function readCookie&#40;name&#41;
&#123;
	var nameEQ = name + "=";
	var ca = document.cookie.split&#40;';'&#41;;
	for&#40;var i=0;i < ca.length;i++&#41;
	&#123;
		var c = ca&#91;i&#93;;
		while &#40;c.charAt&#40;0&#41;==' '&#41; c = c.substring&#40;1,c.length&#41;;
		if &#40;c.indexOf&#40;nameEQ&#41; == 0&#41; return c.substring&#40;nameEQ.length,c.length&#41;;
	&#125;

	return null;
&#125;

/*
* get cookie
*
*/

var gotCookie1 = readCookie&#40;'myTextStyle'&#41;;
var gotCookie2 = readCookie&#40;'myOptions'&#41;;

function getCookie&#40;&#41;
&#123;
	if&#40;gotCookie1&#41;
	&#123;
		gotCookie = decodeURI&#40;gotCookie1&#41;.split&#40;"|"&#41;;

		mBold = gotCookie&#91;0&#93;;
		mItalic = gotCookie&#91;1&#93;;
		mUnderline = gotCookie&#91;2&#93;;
		textColor = gotCookie&#91;3&#93;;
		textSize = gotCookie&#91;4&#93;;
		textFamily = gotCookie&#91;5&#93;;
	&#125;

	if&#40;gotCookie2&#41;
	&#123;
		gotCookie = decodeURI&#40;gotCookie2&#41;.split&#40;"|"&#41;;

		userRPM = gotCookie&#91;0&#93;;
		userRWebcam = gotCookie&#91;1&#93;;
		userEntryExitSFX = gotCookie&#91;2&#93;;
		userNewMessageSFX = gotCookie&#91;3&#93;;
		userSFX = gotCookie&#91;4&#93;;
	&#125;
&#125;

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag