5

是否可以在“提供商托管应用程序”中使用 SharePoint 左侧导航栏。SharePoint 网站“PlaceHolderLeftNavBar”上显示的导航。有没有类似 ajax 调用或 REST/CSOM 功能的方法?

4

2 回答 2

1

根据官方 MSDN 文档,CSOM 和 JSOM 都包含 Navigation 属性,这些属性还提供对快速启动菜单(又名“左侧导航栏”)的访问。

文档链接如下:

SP.Navigation.quickLaunch 属性 (sp.js) (JSOM)

Navigation.QuickLaunch 属性(CSOM)

为了在提供商托管的应用程序中使用 CSOM 或 JSOM,您需要使用 OAUTH(适用于 Office 365/SharePoint Online)或在高信任度/本地环境中使用证书进行身份验证。

如果您使用 Visual Studio 2013 提供的适用于 SharePoint 2013 的应用程序模板,并选择提供程序托管,则它应该附带一个 TokenHelper.cs/vb 类文件,该文件将为这两种方案完成大部分繁重工作。MSDN 上还提供了有关身份验证技术的更多信息 - 请特别查找以下主题:

  • SharePoint 2013 中应用程序的授权和身份验证 如何:
  • 为 SharePoint 2013 创建高信任应用程序(高级主题)

我不确定此时是否有可用的纯 REST 端点,这肯定可以简化提供商托管应用程序中 CSOM / JSOM 的高级授权要求。

于 2014-03-24T14:29:32.900 回答
1

SP.Web.navigation 属性获取一个值,该值指定站点上的导航结构,包括快速启动区域和顶部导航栏

如何通过 CSOM (JavaScript) 访问导航(快速启动)

function getQuickLaunch(success,error)
{
   var context = new SP.ClientContext.get_current();
   var web = context.get_web();
   var nav = web.get_navigation();
   var quickLaunch = nav.get_quickLaunch();
   context.load(quickLaunch);
   context.executeQueryAsync(
      function() { 
         var nodes = [];
         var nodesCount = quickLaunch.get_count();
         for(var i = 0; i < nodesCount;i++){
             var node = quickLaunch.getItemAtIndex(i);
             nodes.push(node);
         }
         success(nodes);
      },
      error
   );
}

用法

getQuickLaunch(
   function(nodes){
      for(var idx in nodes)
      {
          console.log(nodes[idx].get_title());
      }
   },
   function(sender, args) {
          console.log('Error:' + args.get_message());
   }
);

如何通过 REST 访问导航(快速启动)

function getQuickLaunch(siteurl, success, failure) {
    $.ajax({
        url: siteurl + "/_api/web/navigation/quickLaunch",
        method: "GET",
        headers: { "Accept": "application/json; odata=verbose" },
        success: function (data) {
            success(data.d.results);
        },
        error: function (data) {
            failure(data);
        }
    });
}

用法

getQuickLaunch(_spPageContextInfo.webAbsoluteUrl,
   function(nodes){
      for(var idx in nodes)
      {
          console.log(nodes[idx].Title);
      }
   },
   function(error) {
          console.log(JSON.stringify(error));
   }
);
于 2014-04-12T08:06:50.693 回答