Warum ist das Dokument.Körper == null in Firefox aber nicht in Safari
Ich habe ein problem mit einer Seite, wo ich versuche zu bekommen colorbox (eine Art lightbox für jQuery) arbeiten. Es funktioniert nicht, scheinbar wegen der document.body
wird null
im FireFox (3.5.3). Dies ist nicht der Fall in Safari (4.0.3), wo die colorbox funktioniert.
Etwas, springt bei mir ist, dass (ich verwende Drupal 6) drupal angehängt ein script-tag, um einige JavaScript-Variablen auf der ganz unten auf der Seite, unten, die schließenden body-und html-tags. Ansonsten sehe ich keine problem. Leider bin ich mir mit viel Mühe, es nicht zu tun. Könnte es sein das, dass FF Probleme mit dem Körper?
Mit colorbox - Beispiel-Dateien im Firefox funktioniert (und die document.body
definiert ist).
Gibt es eine Möglichkeit, die ich verwenden könnte, jQuery nachfüllen der document.body
Eigenschaft, mit etwas von $()
vielleicht, oder sollte ich das weiter hämmern auf drupal, um nicht einen script-tag außerhalb der html-tags (leichter gesagt als getan)?
Zur Klärung der document.body
ist null
auch nachdem die Seite fertig laden. Hier ist eine Firebug-Konsole erfassen:
>>> document.body
null
>>> $().attr('body')
null
InformationsquelleAutor dlamblin | 2009-10-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den üblichen Grund
document.body
null ist, weil Sie der Ausführung des Skripts, bevor die<body>
tag(*) festgestellt wurde. Ohne zu sehen-code kann ich nicht sicher sagen, aber das wäre der übliche Grund. Bewegen, wo Sie haben die Skripte.(*: oder ein anderes element, wie z.B.
<p>
, weiß der browser nicht auftreten kann, außerhalb eines Körpers, in welchem Fall es leise fügt eine<body>
zu beheben die fehlende markup. Ein Unterschied in der Analyse von gewissen in der Regel-im-Körper-tags könnte erklären, warum Safari können Sie mit ihm Weg erhalten.)Nicht. Es ist gebrochen markup und Drupal sollten es nicht tun, aber die Schließung der
</body>
hört nichtdocument.body
verweisen auf die korrekte DOM-Knoten.Nein,
document.body
ist nur reflektiert im Grunde das gleiche wiedocument.getElementsByTagName('body')[0]
, so versuchen, es nicht sinnvoll ist, und wenn Sie nicht finden können, einen Körper mitdocument.body
, jQuery wird nicht in der Lage, es zu finden mit$('body')
.$('body')
so vielleicht, irgendwo in irgendeinem Dokument.Körper zugewiesen wurde, auf null?Sie kann nicht zuordnen, zu dokumentieren.Körper; Sie erhalten einen JavaScript-Fehler in jedem browser. Ist es möglich Sie stattdessen einfach zufällig definiert eine Globale variable mit dem Namen 'Dokument', die versteckt ist der Zugriff auf die real-Dokument-Objekt?
oder, jQuery verfügt über integrierte Kontrollen, die es ermöglichen, die Rückkehr der nicht-null-Wert für
$('body')
. dh. es macht sicher (oder wartet)<body>
geladen wird.Ich bin nicht sicher, ob so etwas möglich ist... jedenfalls ist es nicht. Siehe Zeile 90 von jQuery 1.4.2, was es nicht jetzt tun, ist die Optimierung der
('body')
Fall nur abholendocument.body
direkt. (Das ist ein bisschen geirrt, als wenndocument.body
istnull
nun bekommen Sie ein wrapper-Liste mit einem Element,null
statt einer null-Länge-Liste.)Nachträglich akzeptiert
InformationsquelleAutor bobince
Sollte es keine Ausgabe von Drupal unter dem body-tag. Überprüfen Sie Ihre Themen
page.tpl.php
- Datei. Das Ende sollte sehen ziemlich viel wie folgt:Sollte es keine print-Anweisung unterhalb der Ausgabe der $closure variable, so muss dies der Letzte Inhalt Ausgabe (aber immer noch innerhalb den Körper).
Interessant - normalerweise das google analytics-tag würde ein Teil der Inhalte die $closure variable, nicht auf einen separaten Ausgang unten. Sie sind mit dem google_analytics-Modul, oder hast du die Tags selbst dort?
Möchten Sie möglicherweise entfernen Sie die analytics-tag vorübergehend, um zu sehen, ob sich dies auf Ihr problem - wenn es nicht, fügen Sie es wieder über
drupal_add_js()
mit$scope='footer'
ist, dann wird es Teil des $closure variable.InformationsquelleAutor Henrik Opel
Nicht verwenden Sie ein anderes JS-framework zusammen mit jQuery ?
Wenn ja, haben Sie sich darum kümmern, wie das laden beider Bibliotheken, so dass Sie kompatibel bleiben (um die Kompatibilität zu beheben...) ?
InformationsquelleAutor Open SEO
Gut, das ist seltsam, aber nur durch das hinzufügen dieser Zeile an der Unterseite von meinem
$(document).ready(function(){});
behoben, was war das brechen der Körper:Aber ich muss noch schauen, warum es kaputt gegangen in den ersten Platz, und auch, warum es nicht brechen in safari.
InformationsquelleAutor dlamblin
sorry diese Antwort ist nicht in jquery (ich habe wrestling mit etwas ähnliches in den letzten paar Stunden mit prototype).
Grundsätzlich werden die top-Antwort von bobince ist durchaus sehr hilfreich, aber Sie kann re-ordnen Sie das Dokument Körper der trick ist, es zu finden.
Dies ist der Prototyp, aber Sie bekommen die Idee,
Dem Inhalt einer definierten element auf der Seite finden Sie mit den üblichen Auswahlen, jede verwendet werden kann, ist es nicht eigentlich egal, von dort traverse nach oben und dann nach unten und entlang auf das body-element.
Hoffe, das hilft, wie ich schon sagte, mein problem war nur ähnlich, nicht sicher, wie das gehen für Sie, aber ich hoffe, dass es zumindest löst eine Idee für jemanden.
InformationsquelleAutor Louis