webForumDet fria alternativet

Fungerar inte createElement i Firefox?

13 svar · 640 visningar · startad av saturday

saturdayMedlem sedan jan. 2007133 inlägg
#1

Jag använder detta script för att fånga upp besökarna till en sida. Det fungerar kalas, så länge de kör IE. Använder de Firefox körs inte detta script... Har någon en vettig lösning på det? Kan inte komma på hur jag ska lösa det. Jag vill gärna inte att vissa besökare trillar i genom.

<script language="JavaScript">
//GET STATS
function Stats() {
	var col = screen.colorDepth;
	var res = screen.width + "x" + screen.height;

	var report=document.createElement('script');
	report.type='text/javascript';
	report.id="reportStats";
	report.src='getStats.asp?res='+res+'&col='+col+'';
}

Stats();
</script>
colioneMedlem sedan juni 20014 421 inlägg
#2

Du insertar aldrig ditt skapade element på sidan. Kolla specifikation:

http://developer.mozilla.org/en/docs/DOM:document.createElement

saturdayMedlem sedan jan. 2007133 inlägg
#3

colione skrev:

Du insertar aldrig ditt skapade element på sidan. Kolla specifikation:

http://developer.mozilla.org/en/docs/DOM:document.createElement

Rätt rörig sida, hittade nog inte det jag behövde hitta. Jag hittade bara någon insertBefore vilken jag inte såg logiken i riktigt...

colioneMedlem sedan juni 20014 421 inlägg
#4

Vi borde kunna lösa det såhär:

<script language="JavaScript">
//GET STATS
function Stats() {
	var col = screen.colorDepth;
	var res = screen.width + "x" + screen.height;

	var report=document.createElement('script');
	report.type='text/javascript';
	report.id="reportStats";
	report.src='getStats.asp?res='+res+'&col='+col+'';
	[B]document.body.appendChild(report)[/B]
}

Stats();
</script>
spangoMedlem sedan juni 20008 205 inlägg
#5

Som det är nu skapar du bara elementet, du måste säga var det ska stoppas in för att det ska rocka. Just i det här fallet spelar det ingen större roll var det hamnar, men hade det varit typ en bild hade det varit lite halvtrist om browsern bara stoppat in den någon slumpmässig stans :) Men lägg in document.body.appendChild(report) sist i funktionen, så läggs scriptanropet in sist i bodyn.

red. You snooze, you lose...

saturdayMedlem sedan jan. 2007133 inlägg
#6

Scriptet fungerar dock fortfarande inte i Firefox. :(

colioneMedlem sedan juni 20014 421 inlägg
#7

Får du nåt fel i felkonsolen?
Vad hädner om du kastar in en alert, typ:

<script language="JavaScript">
//GET STATS
function Stats() {
	var col = screen.colorDepth;
	var res = screen.width + "x" + screen.height;
	alert("Innan skapning av elementet. res har värdet:"+res)
	var report=document.createElement('script');
	report.type='text/javascript';
	report.id="reportStats";
	report.src='getStats.asp?res='+res+'&col='+col+'';
	document.body.appendChild(report)
	alert("Nu är elementet appendat. col, har värdet:"+col)
}

Stats();
</script>
saturdayMedlem sedan jan. 2007133 inlägg
#8

Jo, alerten kommer. Asp dokumentet är felfritt, men inget kommer in i databasen (Som ASP dokumentet sparar in). Men med IE sparas infon in i databasen.

colioneMedlem sedan juni 20014 421 inlägg
#9

Dyker båda alertsen upp? Jag har lagt in två stycken där. Jag menade om du får nåt felmeddelande på javscriptet i firefox felkonsol.

saturdayMedlem sedan jan. 2007133 inlägg
#10

Ah, sry, alert 2 kommer inte upp. Felkonsollen pekar på raden,

> document.body.appendChild(report)

colioneMedlem sedan juni 20014 421 inlägg
#11

Jepp och skälet till det är att body inte har skapats färdigt ännu.

Detta exempel fungerar:

<html>
<head>
<script language="JavaScript">
//GET STATS
function Stats() {
	var col = screen.colorDepth;
	var res = screen.width + "x" + screen.height;
	var report=document.createElement('script');
	report.type='text/javascript';
	report.id="reportStats";
	report.src='getStats.asp?res='+res+'&col='+col+'';
	document.body.appendChild(report);
	
}
function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function() {
            if (oldonload) {
                oldonload();
            }
            func();
        }
    }
}

</script>
</head>
<body>
<script>
addLoadEvent(Stats())
</script>
</body>
</html>

Notera att addLoadEvent() ligger i body-taggen.

colioneMedlem sedan juni 20014 421 inlägg
#12

En annan lösning är att göra såhär istället, då får du mindre kod.

<html>
<head>
<script language="JavaScript">
//GET STATS
function Stats() {
	var col = screen.colorDepth;
	var res = screen.width + "x" + screen.height;
	var report=document.createElement('script');
	report.type='text/javascript';
	report.id="reportStats";
	report.src='getStats.asp?res='+res+'&col='+col+'';
	document.getElementsByTagName("HEAD")[0].appendChild(report);
	
}
Stats()
</script>
</head>
<body>
</body>
</html>
saturdayMedlem sedan jan. 2007133 inlägg
#13

Tack som tusan, det löste det hela!

colioneMedlem sedan juni 20014 421 inlägg
#14

Det kan finnas en risk för att ie dubbelreggar den, då den tydligen reggar direkt på createelement, den borde även regga ytterliggare en gång när man appendar. Du kan väl prova och se. I värsta fall kan du behöva lägga till en if-sats som kollar att det är ie som besöker.

128 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)