Sven Rautenberg: IE-DOM vs. Moz-DOM: Property "specified"

Beitrag lesen

Moin!

Ich habe offenbar (soweit ich den Sachverhalt eingrenzen konnte) ein schwerwiegendes Problem mit dem IE-DOM.

Für ein CMS setze ich den WYSIWYG-Editor tinyMCE ein (http://tinymce.moxiecode.com/). Dieser Editor hat die Funktionen, die ich brauche, und obendrein erzeugt er auch noch validen Code, indem er aufgrund vorgebbarer Regeln HTML-Elemente und Attribute erlaubt bzw. löscht, Standard- und Zwangswerte definieren läßt etc.

Mein Problem tritt jetzt auf, weil ich versuche, Formular-Elemente im Editor mit anzeigen zu lassen (von Einfügen wollen wir erstmal gar nicht sprechen).

Die simple Übung ist: Textarea vom serverseitigen Skript befüllen lassen, Editor nach Vorschrift starten lassen (er erzeugt dann ein IFrame zum Bearbeiten), nichts verändern, Speichern-Button klicken.

Der Mozilla verhält sich wie gewünscht: Ich habe z.B. für <input> die Attribute type, name, size und value erlaubt, so dass ein Miniformular mit einem Textfeld (type="text" name="search2" size="6" value="") und einem Submit-Button (type="submit" value="Suchen") unverändert übernommen werden.

Der IE jedoch löscht mir wichtige Attribute:
Das Textfeld behält nur noch die Attribute name und size, der Submitbutton behält nur das type-Attribut.

Im Editorquelltext habe ich das Problem versucht einzugrenzen, und bin dabei auf die folgende Stelle gestoßen:

if (node.attributes.length > 0) {
   for (var i=0; i<node.attributes.length; i++) {
alert("Clean1: "+elementName+"-"+node.attributes[i].nodeName);
      if (node.attributes[i].specified) {
alert("Clean2: "+elementName+"-"+node.attributes[i].nodeName);
         var attrib = tinyMCE._cleanupAttribute(elementValidAttribs, elementName, node.attributes[i], node);
         if (attrib)
            elementAttribs += " " + attrib.name + "=" + '"' + attrib.value + '"';
      }
   }
}

Dieser Teil wird für jedes HTML-Element aufgerufen. In node.attributes stehen alle Attribute des HTML-Elements drin.

Der Mozilla zeigt als Länge des Arrays nur die tatsächlich im Quelltext definierten Attributzahlen an (also 4 und 2 bei meinen INPUTs).

Der IE zeigt als Länge mindestens den Zahlenwert 83 an - er hat sämtliche möglichen Attribute drin, z.B. alle Javascript-Eventhandler. Damit die nicht alle bearbeitet werden, wird die IE-proprietäre Eigenschaft "specified" abgefragt. Die ist angeblich dann true, wenn das Attribut tatsächlich im Dokument angegeben wurde, false dann, wenn Default-Angaben wirksam werden, und kann auch ganz fehlen. Siehe http://www.devguru.com/Technologies/xmldom/quickref/node_specified.html.

Frage an die Experten: Wie kann ich dem IE beibringen, dass ALLE meine im Quelltext definierten Attribute diesen Text mit "true" bestehen und dadurch in meinem Editorquelltext bestehen bleiben?

Wenn ich den Text rausnehme, dann kommen die Attribute nämlich alle "durch" - aber leider werden auch noch Default-Attribute erzeugt (bei <p> und <h1> beispielsweise leere style- und align-Attribute - die kann ich da aber nicht brauchen!).

Wie erwähnt: Im Mozilla funktioniert das alles bestens - was mich irgendwie wundert, aber offenbar hat Mozilla diese specified-Eigenschaft übernommen und im Gegensatz zum IE korrekt umgesetzt.

- Sven Rautenberg