必应地图Web部件(Java脚本错误)



我正试图将SP2007 Map转换为Sharepoint沙箱解决方案,但由于某种原因,当我上传我的Web部件并尝试编辑属性时,我收到了这个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()));

现在我找不到一种方法来消除这个错误,第二,如果有人知道任何更好的方法来获得位置名称为的网络部件中的地图,就像使用谷歌API,我看到了一些项目,例如

必应地图编码Plex

但它看起来有点过时,功能也不多,因为里面没有AJAX控件

(注意:我不能使用silver light,因为客户数量很多,不想强迫他们安装silver light插件或任何其他限制)

当我添加此代码时,错误消失,它将此脚本注册到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);

谷歌地图Web部件

这正是我想要的,但它的谷歌地图+对我的网站来说不是免费的(因为我向用户收取使用我的sharepoint应用程序的费用)

我想知道是否有人知道我可以使用地图作为网络部件的免费许可证或方式。

干杯

最新更新