Du insertar aldrig ditt skapade element på sidan. Kolla specifikation:
http://developer.mozilla.org/en/docs/DOM:document.createElement
13 svar · 642 visningar · startad av saturday
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>
Du insertar aldrig ditt skapade element på sidan. Kolla specifikation:
http://developer.mozilla.org/en/docs/DOM:document.createElement
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...
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>
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...
Scriptet fungerar dock fortfarande inte i Firefox.
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>
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.
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.
Ah, sry, alert 2 kommer inte upp. Felkonsollen pekar på raden,
> document.body.appendChild(report)
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.
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>
Tack som tusan, det löste det hela!
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.