Communardo Software GmbH, Kleiststraße 10 a, D-01129 Dresden

JavaScript-Fehler "Objekt erforderlich" beim Verschieben eines WebParts in SharePoint

Die Standard-MasterPage von SharePoint (default.master) wurde ohne Angabe eines DOCTYPE geschrie­ben. Dadurch fällt der IE beim Rendern in den Quirks Mode zurück. Entsprechend wur­den SharePoint-eigene Funktionalitäten wie das Verschieben eines WebParts auf Grundlage des Quirks Mode geschrieben.

Wenn man sich nun aber an Standards hal­ten, und einen DOCTYPE ange­ben möchte, bekommt man u.U. Probleme in SharePoint.

So bringt zum Beispiel des Einfügen der Angabe

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

einen Fehler beim Ausführen der JavaScript-Methode "MSOLayout_GetRealOffset" her­vor, wenn sich der WebPart in einem rela­tiv posi­tio­nier­ten DIV befindet:

Message: Objekt erforderlich
Line: 1572
Char: 3
Code: 0
URI: http://SERVER/_layouts/1031/ie55up.js?rev=Ni7%2Fj2ZV%2FzCvd09XYSSWvA%3D%3D

Mögliche Lösungen für die­ses Problem sind:

1. Anpassen der JavaScript-Methode

Dies sollte jedoch nicht direkt in der <12>\TEMPLATE\LAYOUTS\1033\IE55UP.JS gesche­hen, da es dort durch Updates über­schrie­ben wer­den kann. Und spä­tes­tens beim Deployen auf einer Farm wird es umständlich.

Daher sollte man die Anpassung lie­ber in sei­ner Masterpage vor­neh­men. Dazu über­schreibt man ein­fach die "feh­ler­hafte" Methode indem man nach SPWebPartManager fol­gen­den Code einfügt:

<script language="javascript" type="text/javascript">
   1: 
   2:     function MSOLayout_GetRealOffset(StartingObject, OffsetType, EndParent)
   3:     {
   4:         var realValue=0;
   5:         if (!EndParent) EndParent=document.body;
   6:         for (var currentObject=StartingObject; currentObject && currentObject !=EndParent && currentObject != document.body; currentObject=currentObject.offsetParent)
   7:         {             var offset = eval('currentObject.offset'+OffsetType);
   8:             if (offset) realValue+=offset;
   9:         }
  10:         return realValue;
  11:     }
</script>

oder 2. Vermeiden von position:relative bei Containern für WebParts

Stattdessen kann man z.B. float ver­wen­den. Dazu gibt es diverse MasterPage-Vorlagen.

oder 3. Entfernen der DOCTYPE-Angabe in der MasterPage

Das ist eine schnelle Lösung, aber kein opti­ma­les HTML. Eine Triple-A Conformance für "Premium"-Barrierefreiheit wird man dadurch nicht errei­chen kön­nen. Andererseits: Die default.master wird ja auch so ausgeliefert… 😉

Englischsprachige Quellen zu die­sem Thema:

Related Posts

1 Kommentar

Super und Vielen Dank für die­sen Artikel!!
War genau das, was ich gesucht habe und hat mir sehr geholfen

Comments are closed.

Pin It on Pinterest