Problem
Gelegentlich erscheint beim Verwenden von SharePoint-Websites im Internet Explorer eine gelbe Warnleiste mit der Meldung, dass die Website das Add-On "Name ActiveX Control" ausführen möchte.
Ursache
Dieses Problem tritt auf, wenn man mit dem Internet Explorer 7 eine SharePoint-Website aufruft, die nicht als "Vertrauenswürdige Site" eingetragen ist, und diese versucht, das ActiveX Control "NameCtrl" zu laden.
Öffnet man eine Intranet-Website, so erscheint diese Meldung nicht, da Intranet-Websites automatisch vom Internet Explorer als vertrauenswürdig eingestuft werden und dieser dann das ActiveX Control ohne Nachfrage ausführt.
Dieses ActiveX Control wird verwendet, um Anwesenheits-Informationen zu Benutzern anzuzeigen, dazu integriert es sich mit Outlook und Communicator. (Mehr Informationen dazu siehe: ActiveX und Browserkompatibilität in MOSS 2007 - Artikel 1/2 )
Dies mag im Intranet ein sinnvolles Feature sein, hat aber auf einer Website nichts zu suchen.
Zudem denkt man beim Name "name.dll" zuerst an einen Trojaner o.ä., der Bezug zu SharePoint ist für den normalen Anwender nicht herstellbar.
Lösung
Der von Microsoft im KB-Artikel 931509 vorgeschlagene Lösungsweg funktioniert leider nicht zuverlässig, der er die Lade-Reihenfolge der verschiedenen JavaScript-Dateien nicht berücksichtigt.
Deshalb ist folgender Ansatz besser:
Suchen Sie in Ihrer MasterPage im Abschnitt <head> nach dem PlaceHolderAdditionalPageHead und ändern Sie ihn wie folgt ab:
<head runat="server"> <asp:ContentPlaceHolder id="PlaceHolderAdditionalPageHead" runat="server"/> <script type="text/javascript" src="/_catalogs/masterpage/custom_activex_override.js"></script> </head>
Legen Sie zusätzlich im MasterPage-Katalog die entsprechende Datei "custom_activex_override.js" ab.
Diese sollte folgenden Inhalt haben:
function ProcessDefaultOnLoad(onLoadFunctionNames) { //** Uncomment this to see when this runs //alert('Fixing the Issue'); ProcessPNGImages(); UpdateAccessibilityUI(); //** We comment out the offending ootb function //** and leave the rest of the functions as they were //ProcessImn(); for (var i=0; i < onLoadFunctionNames.length; i++) { var expr="if(typeof("+onLoadFunctionNames[i]+")=='function'){"+onLoadFunctionNames[i]+"();}"; eval(expr); } if (typeof(_spUseDefaultFocus)!="undefined") DefaultFocus(); }
Dadurch wird die mitgelieferte Funktion "ProcessDefaultOnLoad" überschrieben, welche die Fuktion "ProcessImn()" aufruft, die sonst das NameCtrl ActiveX-Control aufrufen würde.
Nebeneffekt: Performance-Steigerung
Da nun das unnötige ActiveX-Control nicht mehr geladen wird, kann man je nach Ausstattung des Client-Systems Geschwindigkeitssteigerungen von bis zu mehreren Sekunden beobachten, was den erstmaligen Seitenaufruf angeht. (Da muss sonst ja immer erst das Control initialisiert werden…)
Quellen: http://support.microsoft.com/kb/931509/en-us/, http://www.sharepointblogs.com/mossman/archive/2007/09/13/fixing-the-name-dll-activex-problem-the-mossman-way.aspx, http://www.katriendg.com/aboutdotnet/2007-9-moss-issue-activex-ie7-931509.aspx
This is not working for me. I made the workaround described in http://support.microsoft.com/kb/931509/en-us no success.
So I tried your solution, but it isn't working neither.
Here is my head part of my master. Are there any errors?
<head runat="server">
<meta name="GENERATOR" content="Microsoft SharePoint">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Expires" content="0">
<SharePoint:RobotsMetaTag runat="server"/>
<title id="onetidTitle"><asp:ContentPlaceHolder id="PlaceHolderPageTitle" runat="server"/> </title>
<Sharepoint:CssLink runat="server"/>
<!--Styles used for positioning, font and spacing definitions-->
<SharePoint:CssRegistration name="<% $SPUrl:~SiteCollection/Style Library/xx/xx.css%>" runat="server"/>
<SharePoint:CssRegistration name="<% $SPUrl:~sitecollection/Style Library/xx/xxControls.css %>" runat="server"/>
<SharePoint:CssRegistration name="<% $SPUrl:~SiteCollection/Style Library/xx/xx_core.css%>" runat="server"/>
<SharePoint:ScriptLink language="javascript" name="InitNoPresence.js" runat="server"/>
<!--Placeholder for additional overrides-->
<asp:ContentPlaceHolder id="PlaceHolderAdditionalPageHead" runat="server" >
<script type="text/javascript" src="/_catalogs/masterpage/custom_activex_override.js"></script>
</asp:ContentPlaceHolder>
</head>
Regards, Pascal