Веб-часть карты Bing (ошибка скрипта Java) - PullRequest
0 голосов
/ 23 января 2012

Я пытаюсь преобразовать карту SP2007 в решение для песочницы Sharepoint, но по какой-то причине, когда я загружаю свою веб-часть и пытаюсь изменить свойства, я получаю эту ошибку Javascript,

Значение свойства UpdateWebPartMenuFocus является нулевым или неопределенным, а не объектом Function

Я провел исследование этой ошибки и нашел только несколько сообщений. Это происходит потому, что если кто-то не ссылался на Core.js в v4.master (мастер-страница по умолчанию), но я проверял, и на него уже ссылались, как показано ниже,

<SharePoint:ScriptLink language="javascript" name="core.js" OnDemand="true" runat="server" />

и вот мой код

        StringBuilder mapHTML = new StringBuilder();
        mapHTML.Append("<div>");
        mapHTML.Append("<script src=\"https://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.3\"></script>");
        mapHTML.Append("<script type='text/javascript' id='clientEventHandlersJS'>");
        mapHTML.Append("var map = null;");
        mapHTML.Append("function GetMap()");
        mapHTML.Append("{");
        mapHTML.Append("try{");
        mapHTML.Append(" var latLon = new VELatLong(52.29504228453734,-2.2851562500000044);");
        mapHTML.Append("map = new VEMap('myMap');");
        mapHTML.Append("map.LoadMap(latLon,5);");
        mapHTML.AppendFormat("map.Find(null, '{0}', null, null, null, null, false, false, false, true,LocFound);", HtmlEncode(_Location));
        mapHTML.Append("}");
        mapHTML.Append("catch(err){}");
        mapHTML.Append("}");
        mapHTML.Append("function LocFound(thelayer, resultsArray, places, hasMore, veErrorMessage)");
        mapHTML.Append("{");
        mapHTML.Append("try{");
        mapHTML.Append("if(places != null && places.length >0)");
        mapHTML.Append("{");
        mapHTML.Append("var latlong = places[0].LatLong;");
        mapHTML.Append("}");
        mapHTML.Append("else");
        mapHTML.Append("{");
        mapHTML.Append("myMap.style.display = 'none';");
        mapHTML.Append("locationError.style.display = 'block';");
        mapHTML.Append("}");
        mapHTML.Append("var shape = new VEShape(VEShapeType.Pushpin,latlong);");
        mapHTML.AppendFormat("shape.SetTitle('{0}');", HtmlEncode(_PushPinTitle));
        mapHTML.Append("map.AddShape(shape);");
        mapHTML.Append("map.SetZoomLevel(14);");
        mapHTML.Append("}");
        mapHTML.Append("catch(err){}");
        mapHTML.Append("}");
        mapHTML.Append("  function addLoadEvent(func) ");
        mapHTML.Append("  { ");
        mapHTML.Append("try{");
        mapHTML.Append("    var oldonload = window.onload; ");
        mapHTML.Append("    if(typeof window.onload != 'function') ");
        mapHTML.Append("    { ");
        mapHTML.Append("      window.onload = func; ");
        mapHTML.Append("    } ");
        mapHTML.Append("    else ");
        mapHTML.Append("    { ");
        mapHTML.Append("      window.onload = function()");
        mapHTML.Append("        { ");
        mapHTML.Append("          func(); ");
        mapHTML.Append("        } ");
        mapHTML.Append("    } ");
        mapHTML.Append("}");
        mapHTML.Append("catch(err){}");
        mapHTML.Append("  } ");
        mapHTML.Append("addLoadEvent(GetMap); ");
        mapHTML.Append("</script>");
        mapHTML.AppendFormat("<div id=\"myMap\" style=\"position:relative\" width:\"{0}\" height:\"{1}\" ></div>", HtmlEncode(_MapWidth), HtmlEncode(_MapHeight));
        mapHTML.AppendFormat("<div id=\"locationError\" style=\"position:relative\">", HtmlEncode(_MapWidth), HtmlEncode(_MapHeight));
        //mapHTML.AppendFormat("{0}", HtmlEncode(_LocationError));
        mapHTML.Append("</br>");
        mapHTML.AppendFormat("{0}", HtmlEncode(_Location));
        mapHTML.Append("</div>");
        mapHTML.Append("</div>");
        Controls.Add(new LiteralControl(mapHTML.ToString()));
        //AddControl(new LiteralControl(mapHTML.ToString()));

Теперь я не могу найти способ избавиться от этой ошибки. Во-вторых, если кто-нибудь знает любой лучший способ получить карту в веб-части с именем местоположения , например, с помощью Google API, Я видел несколько проектов, например

Код карты Bing Plex

Но он выглядит немного старомодно и менее функционально, поскольку в нем нет элементов управления AJAX.

(Примечание: я не могу использовать серебряный свет, так как количество клиентов очень велико, и я не хочу заставлять их устанавливать плагины для серебряного света или любые другие ограничения)

1 Ответ

0 голосов
/ 24 января 2012

Ошибки исчезают, когда я добавляю этот код, он регистрирует этот сценарий в диспетчере сценариев Sharepoint 2010 и останавливает конфликт, насколько мне известно, если кто-то может объяснить его лучше, то это очень приветствуется.

 System.Web.UI.ClientScriptManager csm = Page.ClientScript;
 StringBuilder builder = new StringBuilder();
 string SCRIPT_NAME = "MapScript" + this.ID;
    {// all that code above}
 csm.RegisterClientScriptBlock(this.GetType(), SCRIPT_NAME, builder.ToString(), false);

Веб-часть Google Map

Это именно то, что я и хотел, но его Карты Google + бесплатны для моего веб-сайта (поскольку я взимаю плату с пользователей за использование приложения sharepoint)

IМне было интересно, если кто-нибудь знает какую-либо бесплатную лицензию или как я могу использовать карты в качестве веб-части.

Cheers

...