2009-03-19 6 views
0

Wir haben eine Anwendung, wo Benutzer "Notizen" in ein Rich-Edit-Steuerelement eingeben können (Telerik RedEditor, aber das spielt hier keine Rolle). Wir hatten einen Benutzer eingeben Notizen von w/in Safari, die ein <span></span> in der Mitte der Banknote hatte, und dass Spanne hatte einen stil es white-space:pre Der HTML-Code der Notiz war in der Form festgelegt wird:Spanne mit Leerzeichen im IE (7) angewendet _past_ Ende der Spanne

<div> This is a note <span class="Apple-tab-span" style="white-space: pre; "> </span> and here's more of the note. </div> 

Einfach genug, sollte der Stil gelten für die Spannweite, und die Spannweite hatte 4 Leerzeichen drin. In der resultierenden Ausgabe sollten 4 Leerzeichen enthalten sein.

Hier ist das Problem. IE scheint, dass white-space: pre; Stil nicht nur auf die Spannweite, sondern auf die umschließenden div! Daher hat diese lange Zeile, die umbrochen sein sollte, da sie nicht in der Spannweite ist, das Dokument jetzt so lange ausgedruckt, bis die Zeile auf die Seite passt.

Was fehlt mir. Ich weiß, IE hat Probleme, aber das scheint nicht richtig, auch für IE.

Also, die Frage (n):

1) Bin ich richtig, dass das white-space Attribut sollte nur auf die Spanne angewandt haben?

2) Kann das irgendwie gelöst werden? Denken Sie daran, ich habe keine Kontrolle über den eingegebenen Inhalt. Und es wird von einem Mac mit Safari eingegeben und im IE angezeigt.

Edit: Der Doctype auf der Seite in Frage: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Antwort

0

Sie einen Standards-Modus DOCTYPE verwenden? Im Quirks-Modus wendet IE fälschlicherweise 'white-space' nur auf Blockelemente an. (Ich konnte es nicht bekommen, um den weißen Raum aus der Spannweite, aber es einfach nicht funktioniert.)

Ich habe nicht die Kontrolle über den Inhalt eingegeben werden.

Es ist ungewöhnlich, dass raw HTML-Inhalte eingegeben werden können; In diesem Fall können Sie wirklich keine Browser-Seltsamkeiten reparieren!

+0

Raw HTML-Inhalt kann nicht eingegeben werden (gut, ich denke, es könnte, aber war nicht), das war eher ein Ausschneiden/Einfügen aus einem anderen Dokument auf dem Mac. Es handelt sich um eine private Site, die von Forschern genutzt wird, sodass wir uns mehr mit Fähigkeiten als mit XSS-Schutz beschäftigen. –

0

1) Ja, Sie haben Recht.

2) Ich hatte eine Menge Probleme mit Telerik-Steuerelementen, insbesondere die RTE-Änderung von rohem HTML-Code. Ich schlage vor, dass Sie Ihre Datenbank überprüfen und sehen, was HTML dort gespeichert wird.

Hoffnung, die

Darko

+0

Das war Text, der über die normale (nicht HTML) Ansicht eingegeben wurde, aber ich höre, was du darüber sagst, wenn du Sachen änderst. Allerdings geben wir diesen HTML-Code dann auf einer anderen Seite aus (nur dort ausgegeben, kein Editor) und hier tritt das Problem auf. Es ist also nicht der Herausgeber. –

0

hilft Ich bin nicht sicher, was Sie versuchen, mit einem Raum in einer Spanne mit bereits als seinen Stil zu erreichen. Wenn Sie versuchen, den Satz mit einem Leerzeichen zu versehen, und nicht mit dem Zeilenumbruch, setzen Sie den Umbruchstil auf das gesamte div. Wenn alles, was Sie wollen, ein Leerzeichen ist, setzen Sie die HTML-Einheit & nbsp direkt zwischen den beiden Wörtern und sie werden nicht auseinander brechen. Oder wenn Sie versuchen, einen beliebigen Raum zu erstellen, der größer ist als ein einzelner Raum, vergessen Sie vorher und geben Sie diesem Bereich eine Breite.