【问题标题】:Bing Map webpart (Java Script Error)必应地图 web 部件(Javascript 错误)
【发布时间】: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,我见过几个项目,例如

Bing Map Code Plex

但它看起来有点旧式,而且功能较少,因为其中没有 AJAX 控件。

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

【问题讨论】:

    标签: javascript sharepoint google-maps web-parts bing-maps


    【解决方案1】:

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

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

    我想知道是否有人知道任何免费许可或我可以将地图用作 Web 部件的方式。

    干杯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多