【发布时间】:2012-02-16 17:53:19
【问题描述】:
我正在尝试将 SP2007 地图转换为 Sharepoint 沙箱解决方案,但由于某种原因,当我上传我的 webpart 并尝试编辑属性时,我收到了这个 Javascript 错误,
属性“UpdateWebPartMenuFocus”的值为 null 或未定义,不是 Function 对象
我对此错误进行了研究,发现只有几篇帖子,这是因为如果有人没有在 v4.master(默认母版页)中引用 Core.js,但我检查并已经引用了它,如下所示,
<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()));
现在我找不到解决此错误的方法,其次,如果有人知道 任何更好的方法来获取带有位置名称的 webpart 中的地图,例如使用 google API,我见过几个项目,例如
但它看起来有点旧式,而且功能较少,因为其中没有 AJAX 控件。
(注意:我不能使用silver light,因为客户数量很多,不想强迫他们安装silver light插件或任何其他限制)
【问题讨论】:
标签: javascript sharepoint google-maps web-parts bing-maps