#1 Fehlermeldung: 'crossbox' ist Null oder kein Objekt von Wolfgang 18.09.2009 18:31

avatar

Hallo Florian,
der IE gibt bei dem Script der "Scroll in Box" folgende Fehlermeldung.
Kannst Du Dir erklären, wo hier der Fehler im Script liegt

Meldung: 'crossbox' ist Null oder kein Objekt
Zeile: 239
Zeichen: 1
Code: 0
URI: http://www.future-andres.de/forum/headscript.js



Script der "Scoll in Box":


<script type="text/javascript">

/***********************************************
* Amazon style Drop-in content box- © Dynamic Drive DHTML code library (www.dynamicdrive.com)
* Visit DynamicDrive.com for hundreds of DHTML scripts
* This notice must stay intact for legal use
* Go to http://www.dynamicdrive.com/ for full source code
***********************************************/

var dropboxleft=200 //Waagerechte Position in Pixeln (px)
var dropboxtop=100 //Senkrechte Position in Pixeln (px)
var dropspeed=15 //Animationsgeschwindigkeit (je hoeher, desto schneller)

// Anzeigemodus:
// 1) "always"- Mit jedem Laden der Seite
// 2) "oncepersession"- Einmal pro Besuch
// 3) Zufallszahl (z. B. "5")- Zufällige Anzeige einem Anteil entsprechend. Eine "2" ergibt die Wahrscheinlichkeit von 50% (1/2), dass die Drop-In-Box angezeigt wird.

var displaymode="always"

/// Ab hier nichts mehr aendern ///////////

if (parseInt(displaymode)!=NaN)
var random_num=Math.floor(Math.random()*displaymode)
var ie=document.all
var dom=document.getElementById

function initboxv2(){
if (!dom&&!ie)
return
crossboxcover=(dom)?document.getElementById("dropinboxv2cover") : document.all.dropinboxv2cover
crossbox=(dom)?document.getElementById("dropinboxv2"): document.all.dropinboxv2
scroll_top=(ie)? truebody().scrollTop : window.pageYOffset
crossbox.height=crossbox.offsetHeight
crossboxcover.style.height=parseInt(crossbox.height)+"px"
crossbox.style.top=crossbox.height*(-1)+"px"
crossboxcover.style.left=dropboxleft+"px"
crossboxcover.style.top=dropboxtop+"px"
crossboxcover.style.visibility=(dom||ie)? "visible" : "show"
dropstart=setInterval("dropinv2()",50)
}
function dropinv2(){
scroll_top=(ie)? truebody().scrollTop : window.pageYOffset
if (parseInt(crossbox.style.top)<0){
crossboxcover.style.top=scroll_top+dropboxtop+"px"
crossbox.style.top=parseInt(crossbox.style.top)+dropspeed+"px"
}
else{
clearInterval(dropstart)
crossbox.style.top=0
}
}

function dismissboxv2(){
if (window.dropstart) clearInterval(dropstart)
crossboxcover.style.visibility="hidden"
}


function truebody(){
return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}

function get_cookie(Name) {
var search = Name + "="
var returnvalue = ""
if (document.cookie.length > 0) {
offset = document.cookie.indexOf(search)
if (offset != -1) {
offset += search.length
end = document.cookie.indexOf(";", offset)
if (end == -1)
end = document.cookie.length;
returnvalue=unescape(document.cookie.substring(offset, end))
}
}
return returnvalue;
}

if (displaymode=="oncepersession" && get_cookie("droppedinv2")=="" || displaymode=="always" || parseInt(displaymode)!=NaN && random_num==0){
if (window.addEventListener)
window.addEventListener("load", initboxv2, false)
else if (window.attachEvent)
window.attachEvent("onload", initboxv2)
else if (document.getElementById || document.all)
window.onload=initboxv2
if (displaymode=="oncepersession")
document.cookie="droppedinv2=yes"
}

</script>






Viel Grüße
Wolfgang

#2 RE: Fehlermeldung: 'crossbox' ist Null oder kein Objekt von florian-zier 11.10.2009 13:00

avatar

Hallo Wolfgang,
ich habe zwar noch nicht so ausführlich getestet, aber vorab schonmal erste Gedanken dazu.

Also bei mir läuft es übrigens im IE, Firefox und Opera.
Vielleicht hakt's mit anderen Skripten.

Achte bitte darauf, dass Variablennamen evtl. nicht aus versehen doppelt vergeben wurden und sich gegenseitig überschreiben. (z.B. in anderen Skripts)
get_cookie() ähnelt z.B. sehr getCookie von der Zeitberechnung, wobei dies nicht schlimm ist.
Womöglich wurde aber etwas anderes eben doppelt vergeben, dann sollte eine Variable innerhalb eines Skriptes umbenannt werden.

Was mir noch aufgefallen ist, sind die spärlich bis gar nicht verteilten Semikolons am Ende der Anweisungen.
Bei Variablen-Zuweisungen oder sonstigen Anweisungen folgt am Ende immer ein ";".
Womöglich kann dein Browser nicht damit umgehen und verweigert deshalb den Dienst.
Bei meiner ersten Skriptüberprüfung im Firefox zeigte es aber keine Fehler an, der Browser weiß wohl von selbst, wie er sich verhalten soll.

Dies nur mal als kleine Hinweise und evtl. Ursachen.
Als erstes werde ich die Code-Struktur berichtigen, bevor ich weitere Tests machen kann.
Aber vielleicht war der Fehler da schon dabei...

#3 RE: Fehlermeldung: 'crossbox' ist Null oder kein Objekt von florian-zier 11.10.2009 18:10

avatar

Hallo Wolfgang,
ich habe den Quellcode nun soweit bereinigt.
Es funktioniert nach wie vor tadellos in allen drei Browsern.

Die Zeile, welche das DIV in der Variable crossbox speichert, sollte diese sein:

1
crossbox = (dom)? document.getElementById("dropinboxv2") : document.all.dropinboxv2;


Vielleicht versucht dein IE ja fälschlicherweise doch document.getElementById anstatt document.all zu verwenden, auch wenn er es nicht hinbekommt. ()
Wenn die anderen Browser funktionieren, schätze ich, dass das DIV auch die richtige ID erhalten hat...

Ich habe einige Einrückungen vorgenommen und ";" am Ende der Anweisungen gesetzt.
Damit die Seite valide und strukturell in Ordnung bleibt, habe ich mir noch erlaubt, folgendes zu ändern:

1
<div> -> ersetzt mit -> <div>


Ansonsten wird das DIV im Beschreibungstext als HTML interpretiert.

Eine komplette Datei mit allen kleinen Änderungen findest du im Anhang.

#4 RE: Fehlermeldung: 'crossbox' ist Null oder kein Objekt von Wolfgang 03.02.2010 20:20

avatar

Fehlermeldung: 'crossbox' ist Null oder kein Objekt

Hallo Florian,
ich habe etwas festgestellt.

Wenn man ein Beitrag im Forum mit der "Scroll in Box" aufruft, gibt es die Fehlermeldung nicht.
Die Fehlermeldung wird immer dann angezeigt, wenn die "Scroll in Box" nicht aktiv ist, z.B. in der "Forum Übersicht", "Suche" ...

Fügt man das "JavaScript" in das "Flat" oder "Threaded"-Templateelement ein, ist dies auch keine 100% Lösung.
Ruft man einen Beitrag ohne "Scroll in Box" auf, wird hier wieder die Fehlermeldung ausgegeben.

Frage:
Kann man der Box bei Inaktivität nicht ein "Objekt" vorgaukeln?

Bis dann
Wolfgang

#5 RE: Fehlermeldung: 'crossbox' ist Null oder kein Objekt von florian-zier 16.02.2010 14:35

avatar

Hallo Wolfgang,
ich habe das Skript nun noch einmal leicht abgeändert und es sollte so nun funktionieren.
Zumindest waren meine Tests mit der Datei im Anhang erfolgreich.
Es wird nun zwar kein Objekt vorgegaukelt, aber wenn das DIV mit der entsprechenden ID nicht vorhanden ist, wird die Skriptausführung abgrebrochen.

So sollten andere JavaScripts nicht an der eigenen Ausführung gehindert werden, nur weil vorher ein Error geworfen wurde.
Damit sollte es theoretisch möglich sein, das Skript weiterhin global z.B. in der Oberen Leiste verfügbar zu machen.
So ist es jederzeit möglich, eine Box in der Foren-Übersicht oder sonst irgendwo außerhalb der Beiträge zu verwenden.
Falls die Box nicht überall verwendet wird, sollte das Skript nun rechtzeitig stoppen, bevor ein Error auftritt.

#6 RE: Fehlermeldung: 'crossbox' ist Null oder kein Objekt von Wolfgang 22.02.2010 22:34

avatar

Hallo Florian,
tausend Dank. Das JavaScript funktioniert jetzt ohne Fehlermeldung! Super!

Viele Grüße aus Hannover
Wolfgang

Xobor Forum Software von Xobor
Einfach ein eigenes Forum erstellen
Datenschutz