webForumDet fria alternativet
Logga in / Bli medlem

Fungerar inte createElement i Firefox?

JavaScript

13 svar · 642 visningar · startad av saturday

Medlem sedan jan. 2007133 inlägg
Frågan#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>
Medlem 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

Medlem 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...

Medlem 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>
Medlem 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...

Medlem sedan jan. 2007133 inlägg
#6

Scriptet fungerar dock fortfarande inte i Firefox. :(

Medlem 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>
Medlem 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.

Medlem 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.

Medlem sedan jan. 2007133 inlägg
#10

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

> document.body.appendChild(report)

Medlem 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.

Medlem 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>
Medlem sedan jan. 2007133 inlägg
#13

Tack som tusan, det löste det hela!

Medlem 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.

281 ms totalt · 4 externa anrop · v20260731065814-full.1b2494f0
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
145 ms — hämta tråd, inlägg och bilagor (db)
134 ms — ändringar (db)